我很困惑并厌倦了C ++:因为我已经被教导过#34;通过引用或指针传递#34;克服获取函数中传递的参数的副本。
因此,在根据经验法则的异常处理场景中:按值抛出,按引用捕获。
为什么Stroustrup在他的" C ++之旅"按价值收获?例如:
void test()
{
try {
std::vector v(−27);
}
catch (std::length_error) {
// handle negative size
}
catch (std::bad_alloc) {
// handle memory exhaustion
}
}
此示例是从书中复制的。第59页。(不变量)。
答案 0 :(得分:4)
为什么Stroustrup在他的" C ++之旅"按价值收获?
除非您因某种原因(例如存储自定义异常类型)而要复制异常,否则应始终按const&
进行操作。这可能是Bjarne的疏忽,或者在特定的片段中,异常是否被复制并不重要。
相关:
为什么C ++的变化不一致?我的意思是不时有变化。例如:在C ++ 11中:
这里没有不一致 - static_assert
只是变得更加灵活,因为它不会强迫用户再提供错误消息。这对于布尔条件本身不言自明且错误消息不会添加任何有用的情况非常有用。