是按值抛出和按引用捕获的经验法则
Is throw by value and catch by reference the law of thumb?
我感到非常困惑和厌倦C++:正如我所教导的那样,"通过引用或指针传递"克服了在函数中传递参数的副本。
因此,在根据经验法则的异常处理场景中:按值抛出,按引用捕获。
为什么斯特劳斯特鲁普在他的"C++之旅"中按价值捕获? 例如:
void test()
{
try {
std::vector v(−27);
}
catch (std::length_error) {
// handle negative size
}
catch (std::bad_alloc) {
// handle memory exhaustion
}
}
这个例子是从书中复制的。第59页。(不变量(。
为什么斯特劳斯特鲁普在他的"C++之旅"中抓住了价值?
除非您出于某种原因想要复制异常(例如存储自定义异常类型(,否则您应该始终通过 const&
捕获。这可能是 Bjarne 的疏忽,或者在那个特定的片段中,是否复制异常并不重要。
相关:
-
"始终通过引用捕获异常">
-
C++ catch 块 - 按值或引用捕获异常?
为什么C++变化不一致?我的意思是一切都会不时变化。例如:在C++ 11 中:
这里没有不一致 - static_assert
只是变得更加灵活,因为它不再强制用户提供错误消息。这对于布尔条件本身不言自明且错误消息不会添加任何有用内容的情况很有用。
相关文章:
- 将对象数组的引用传递给函数
- 什么时候在C++中返回常量引用是个好主意
- 我想将一个对T类型的非常量左值引用绑定到一个T类型的临时值
- 何时在引用或唯一指针上使用移动语义
- 如何在c++中使用引用实现类似python的行为
- 编译C++时未定义的引用
- Ctypes wstring通过引用传递
- 何时返回指针与返回对象的一般经验法则?
- 点云库 (PCL) - 声明点云时何时应使用 ::P tr 的经验法则?
- 是按值抛出和按引用捕获的经验法则
- 并发::并行端口开销和性能命中率(经验法则)
- 新建和删除的经验法则
- 在C++中使用指针或引用作为函数的返回类型是否有经验法则
- 当通过值传递比通过常量引用传递快时的经验法则
- 标准库/模板化容器的常量语义的经验法则
- C++构造函数重载的经验法则
- 当“虚拟”是一个相当大的开销时,有什么经验法则吗
- 避免违反严格混叠规则的最简单的经验法则
- 将函数放在头文件中的经验法则
- 使用 auto&& 和 const auto & 的经验法则