- 主题:大家都用C++的try catch吗?
因为大部分人无法区分什么是异常, 什么是错误。
所以干脆直接全部用错误,简单明了。反正我没有见过哪个大型c++项目采用异常机制的。
【 在 z16166 的大作中提到: 】
: 楼主的基础性问题很多呀
:
: 异常是c++推荐的错误处理方式,但很多人依然习惯于C的那套返回错误码的处理方式。
: ...................
--来自微微水木3.5.14
--
FROM 222.64.157.*
不要看BS怎么说,他是标准委员会的,会自己打自己脸?
坚决反对在C++使用异常。原因
1)性能,C++异常肯定会影响性能。看看C++异常生成的代码就知道了,说不影响性能那是自欺欺人。
2)错误规则,这是至关重要的。异常要求人强制处理,错误码可以让人选择处理。比如存盘,有时候根本不关心是否成功,使用错误码我可以直接忽略。使用异常,你不得不去关心,而且还要去处理。吃饱了撑的。C++异常反而增加
3)美观。JAVA中到处try catch,能让人看吐了。JAVA有些实践还搞了集中异常处理,本末倒置。
C++异常到现在没有流行起来是有原因的。
【 在 z16166 的大作中提到: 】
: 这不是个对错问题,而只是个flavor或者说paradigm问题。
: 根据自己的balance标准决定怎么搞。cpp大佬包括cpp他爹B.S,都是推荐用异常。
: 但要防止滥用异常,人多时这个并不一定好解决。
: ...................
--
FROM 222.64.154.*
不知道你所谓的证明指什么。
你看下生成的汇编要多很多指令,除非你认为这些指令是免费的。
【 在 z16166 的大作中提到: 】
: 你都没提供证据证明"C++异常肯定会影响性能",就武断下结论,属于“顽固派”的一种。
: 这就跟楼主顶楼里写的“C++异常会把调用栈搞没”一样属于无脑推测但又不验证分析的,不值得一驳。
: 为啥呢,因为张嘴就来很简单,但是要分析得下工夫、考验技术,所以无脑懒人都是规避后者的,毕竟上下嘴唇一张一合就能唾沫四溅地开喷,多爽啊
: ...................
--来自微微水木3.5.14
--
FROM 39.144.107.*
我特定测试了一下,性能简直不是一个量级的。
一次异常,抵得上百万次数学运算。这还是在还没有真正抛出的情况。
【 在 z16166 的大作中提到: 】
: 你都没提供证据证明"C++异常肯定会影响性能",就武断下结论,属于“顽固派”的一种。
: 这就跟楼主顶楼里写的“C++异常会把调用栈搞没”一样属于无脑推测但又不验证分析的,不值得一驳。
: 为啥呢,因为张嘴就来很简单,但是要分析得下工夫、考验技术,所以无脑懒人都是规避后者的,毕竟上下嘴唇一张一合就能唾沫四溅地开喷,多爽啊
: ...................
--来自微微水木3.5.14
--
FROM 183.193.16.*
我手上有个上百万行的qt程序,从来没有用过异常,也没有捕获任何qt的异常。
【 在 z16166 的大作中提到: 】
: 你的意思是boost、qt这些库的作者都是SB吗,这两个东西是使用异常的
:
: 抛了异常,但是事先没提供对应的文档说明,才值得骂吧
: ...................
--来自微微水木3.5.14
--
FROM 183.193.16.*
上升到哲学高度了?c++异常就是不好,竟然还有人争论?
再说个c++最成功的一个领域,虚幻引擎都是默认禁用异常的。为啥?虚幻的设计师和开发人员都是很差?
【 在 z16166 的大作中提到: 】
: 培训、自我培训不够。很多搞C++的甚至是从C开始学起,或者从C转过来的,习惯是C的那套(说到这里有些人可以趁机再批一下谭浩强了),连RAII这种C++基本技法都不用,更遑论异常了。而不用RAII基本上也就没有异常安全保证,强行上异常那也是个灾难。骨子里还是懒,疏于学习,但是会找996没时间、生活艰难等借口来搪塞。
:
: 有话语权的架构师之类的,自己可能也对异常不熟悉,搞不出来行之有效的普及办法。也没啥动力,毕竟难于体现在KPI上,花很多精力搞不好还要被罚,多一事不如少一事,就继续用原来的那套好了。
: ...................
--来自微微水木3.5.14
--
FROM 222.64.154.*
为啥游戏不能用异常,虚幻自带了反射系统,这个消耗不大?你这是自相矛盾。
再给你一个LLVM的编码标准
Do not use RTTI or Exceptions
In an effort to reduce code and executable size, LLVM does not use exceptions or RTTI (runtime type information, for example, dynamic_cast<>).
That said, LLVM does make extensive use of a hand-rolled form of RTTI that use templates like isa<>, cast<>, and dyn_cast<>. This form of RTTI is opt-in and can be added to any class.
Android NDK也默认不支持异常。
所有这些都表明C++异常有缺陷,性能,代码尺寸,处理复杂度等等都导致它不是一个好的特性。
【 在 z16166 的大作中提到: 】
: c++异常不好,那只是你的结论而已,居然被你说成了放之四海而皆准颠扑不破的真理了
: 无知又不学习,还死抱着自己的观点不放的,是什么人呢
: 游戏引擎在使用时有帧数要求,类似准实时系统。
: ...................
--
FROM 222.64.154.*
那你就告诉我,那些项目使用了异常?
我好歹举例了,还是流行的。你也举个例子啊,让我学习学习
【 在 z16166 的大作中提到: 】
: 你试图用某几个项目没有使用异常,来证明异常不靠谱,这本身是个错误的推理。
: 因为按你这个推理,只有100%的项目都使用了异常,才能证明异常是靠谱的。
:
: ...................
--来自微微水木3.5.14
--
FROM 39.144.106.*