- 主题:大家都用C++的try catch吗?
楼主的基础性问题很多呀
异常是c++推荐的错误处理方式,但很多人依然习惯于C的那套返回错误码的处理方式。
把调用栈搞没是不存在的
--
修改:z16166 FROM 222.128.162.*
FROM 222.128.162.*
程序异常不是OS的异常,不一定要重启
比如转换十六进制字符串为整数,遇到非法字符或者溢出就可以抛异常,这时候不一定要重启整个进程
【 在 wjhtingerx 的大作中提到: 】
: 我觉得也是,出了异常一般都得重启了。
:
--
修改:z16166 FROM 222.128.162.*
FROM 222.128.162.*
cpp大佬的书里推荐的,又不是我推荐的
你说的是最坏的情况
【 在 overcomeunic 的大作中提到: 】
: 推荐个毛线
: 但凡持续抛异常,性能掉到底
--
FROM 222.128.162.*
前面白说了啊哈哈,异常就可以用来处理错误
In modern C++, in most scenarios, the preferred way to report and handle both logic errors and runtime errors is to use exceptions. It's especially true when the stack might contain several function calls between the function that detects the error, and the function that has the context to handle the error. Exceptions provide a formal, well-defined way for code that detects errors to pass the information up the call stack.
【 在 wjhtingerx 的大作中提到: 】
: 这是错误啊
:
: :
--
FROM 222.128.162.*
哪里在纠偏?给出链接或者原文
【 在 overcomeunic 的大作中提到: 】
: 那你知道现在CPP在纠偏么?
: 大佬说的也不就是全对啊
--
FROM 222.128.162.*
不抛异常时,只有建立exception frame的那点开销吧
【 在 AlphaO 的大作中提到: 】
: try catch不抛出异常性能也往下掉,沉重的运行时开销
: 不过确实有很多推崇try catch,大概因为C++本身就是写bug,相比bug,两害相权取其轻反
:
--
FROM 222.128.162.*
不算吧
22楼说了。unexpected/expected算是在返回值处理这个flavor上试图做得更好
异常、返回值算是不同的flavor吧
翻到一个帖子,关于异常为啥用得没预期的多,该说的貌似他都说了
sandordargo dot com /blog/2022/11/16/cpp23-expected
【 在 overcomeunic 的大作中提到: 】
: noexcept / unexpected/ expected
: 算不算呀?
--
FROM 222.128.162.*
windows上,32位程序需要建立exception frame,64位没有建立exception frame的运行时开销,在没发生exception时是zero-cost的
【 在 AlphaO 的大作中提到: 】
: 到底是多“点”很关键
: 暂时不讨论偶发运行的程序块,影响不大。对于那些反复常态运行的,每次进入try都有开销,包含越大、代价容易越大,而且阻止内部优化,例如缓存啥的几乎全没了,对循环更是灾难,同样的代码编译出来肯定慢
--
FROM 222.128.162.*
请仔细阅读,是x64在没抛出异常时才是zero-cost的;抛出异常时当然不是zero-cost的,要查表处理异常。
x64的异常处理信息是编译期写入了PE文件的。
【 在 AlphaO 的大作中提到: 】
: “try catch是zero-cost”我不信
:
--
FROM 222.128.162.*
那是你不了解好不?生成的是数据表,而不是指令
咄咄逼人地反问别人之前,好歹去查一下资料啊
【 在 AlphaO 的大作中提到: 】
: 所以根源在于,你认为zero-cost是指“在编译期生成代码”,生成了代码,就是zero-cost?
:
--
修改:z16166 FROM 222.128.162.*
FROM 222.128.162.*