- 主题:大家都用C++的try catch吗?
这个一般是用来对付系统和三方库的,自己得不会用。比如硬盘满了,句柄不够了
肯定是必需的
【 在 wjhtingerx 的大作中提到: 】
: 这玩意儿把出问题的调用栈都弄没了,反倒不利于调试吧?
--
FROM 106.3.194.*
你压根没搞清楚这个用在什么地方
【 在 yuanmo 的大作中提到: 】
: C++异常的主要问题是它个半拉子,拉屎拉一半。
: 最开始,你按照书上说的用了异常,一切都显得很高大上。
: 当项目变得有一点规模以后,你调一个函数,然后这个函数你不知道啥原因就会抛出一个异常,你不catch就会崩,你要catch也不知道该catch啥类型,不过你还是catch了抛出的那个。
: ...................
--
FROM 106.3.194.*
你catch住异常,要处理呀。 可以选择记条日志说明哪错了, 甚至把栈打到日志里,或者再把异常抛出去。 你啥也不干,当然啥信息也没有咯
【 在 wjhtingerx 的大作中提到: 】
: 这玩意儿把出问题的调用栈都弄没了,反倒不利于调试吧?
:
: --
发自「今日水木 on iOS」
--
FROM 223.104.41.*
考虑什么情况下需要和不需要是一种负担。考虑错了,全白搭。
【 在 z16166 的大作中提到: 】
: 程序异常不是OS的异常,不一定要重启
: 比如转换十六进制字符串为整数,遇到非法字符或者溢出就可以抛异常,这时候不一定要重启整个进程
--
FROM 103.90.179.*
码农还怕这个?码农的工作充满了各种选择和balance
c++的异常相比java、c#之类的异常难于普及,肯定是有原因的。
机翻一下28楼链接里的分析:
使用异常
另外一个处理错误的选择是显而易见的!就是使用异常。当然,如果你可以的话。它们并不在所有不同的环境中都允许使用,有些团队禁止使用它们。
在某种意义上,这是一个有争议的话题,因为人们对异常可能有非常坚定的看法,很多书籍和会议演讲都可以围绕异常来展开,也确实有很多这样做的。
有些人认为它们代价高昂。像往常一样,这取决于情况。如果你大部分时间都在从数据库读取数据或通过网络发送数据,那么这就没有那么重要了。
另一方面,始终为真的是,它完全绕过了正常的控制流程,使用异常的代码是非常难以推理的。通常你看不到,或者很难看到从你开始的地方结束在哪里。很多人误用异常,多次记录错误并且继续抛出异常。
我认为唯一能让它运行良好的方式是,如果你有一个明确陈述在文档中的异常处理策略。即便如此,也有很大的可能性会不被遵守。尤其是在大型公司中,员工总是变来变去。
【 在 chunhui 的大作中提到: 】
: 考虑什么情况下需要和不需要是一种负担。考虑错了,全白搭。
--
修改:z16166 FROM 222.128.162.*
FROM 222.128.162.*
其实我没正经用过c++。不过我更喜欢erlang那种错了就及时挂的想法。
【 在 z16166 的大作中提到: 】
: 码农还怕这个?码农的工作充满了各种选择和balance
: c++的异常相比java、c#之类的异常难于普及,肯定是有原因的。
: 机翻一下28楼链接里的分析:
: ...................
--
FROM 117.133.52.*
不抛异常性能往下掉是你测试测出来的结论?
【 在 AlphaO 的大作中提到: 】
: try catch不抛出异常性能也往下掉,沉重的运行时开销
: 不过确实有很多推崇try catch,大概因为C++本身就是写bug,相比bug,两害相权取其轻反
:
--
FROM 111.181.130.*
没看明白
你说的这个问题跟c++有什么关系
java/py/js不为什么不会出现这种情况?
【 在 yuanmo 的大作中提到: 】
: C++异常的主要问题是它个半拉子,拉屎拉一半。
: 最开始,你按照书上说的用了异常,一切都显得很高大上。
: 当项目变得有一点规模以后,你调一个函数,然后这个函数你不知道啥原因就会抛出一个异常,你不catch就会崩,你要catch也不知道该catch啥类型,不过你还是catch了抛出的那个。
: ...................
--
FROM 111.181.130.*
erlang能fail fast,是因为它有轻量级进程,并且只通过消息通信,做了隔离
其他语言写的程序可能都不具备这个条件
【 在 chunhui 的大作中提到: 】
: 其实我没正经用过c++。不过我更喜欢erlang那种错了就及时挂的想法。
--
FROM 222.128.162.*
是的。其他语言做不到。但是我觉着这种方法比较好。
【 在 z16166 的大作中提到: 】
: erlang能fail fast,是因为它有轻量级进程,并且只通过消息通信,做了隔离
: 其他语言写的程序可能都不具备这个条件
--
FROM 117.133.52.*