cai*_*rol 74 c++ const exception
我已经多次听过和读过,最好将异常作为引用而不是引用来引用.为什么是
try {
// stuff
} catch (const std::exception& e) {
// stuff
}
Run Code Online (Sandbox Code Playgroud)
比...更好
try {
// stuff
} catch (std::exception& e) {
// stuff
}
Run Code Online (Sandbox Code Playgroud)
Kor*_*icz 56
你需要:
后者并不像前者那么重要,但是删除const的唯一真正原因是表示你想要对异常进行更改(通常只有在想要通过添加上下文重新抛出更高级别时才有用) .
Lig*_*ica 29
根本没有理由.
异常对象存在于自己的内存空间中†因此您不必担心捕获在临时表达式中创建的异常.
您所做的一切都是承诺您不会修改异常对象,但由于异常对象应该具有不可变的接口‡,因此这里没有什么实用的.
但是,当你阅读它时,它可能会让你感到温暖和舒适 - 这对我来说就是这样!
†他们有自己的,特殊的线程局部堆栈.
‡ 免责声明: Boost.Exception打破了这一点,以便做一些时髦的东西,并在构建后添加异常细节.但这是hackery!