NRVO 是否有效,但异常扔进身体
Is NRVO valid with exception throwing in body?
我想了解NRVO在C++中的局限性。具有初始命名声明和单个返回的函数是否会针对 NRVO 和 elide T val
进行优化,即使该函数myFunc()
具有投掷潜力?
T myFunc(bool toThrow) {
T val;
if (toThrow) {
throw std::exception();
}
// Do other things here.
return val;
}
我在C++见解和编译器资源管理器上测试了您的代码的几个版本。
简短的回答是肯定的,编译器很可能会使用 NRVO。
相关文章:
- 是否值得降低我的代码的可读性,以便在出现内存不足错误时提供异常安全性?
- 如果分配数组引发异常,是否应该释放该数组
- C++中的异常是否仅用于提高可读性?
- 是否允许分配器构造和销毁成员函数从内部逻辑引发异常?
- 是否可以检查给定exception_ptr实例是否拥有某种类型的异常?
- 是否正确处理了此代码异常?
- 使用c_str是否有未定义的异常行为
- 异常是否应具有标志/消息,或者每个错误应具有异常类型
- 异常是否可以自动提供有关其环境的详细信息
- 如果捕获常规异常,异常是否有可能冒泡
- X 的错误处理程序抛出异常是否安全?
- 在clCreateContext()中注册的回调中用C++抛出异常是否安全
- 编程语言捕获和处理的异常是否算作软件中断
- 通过引用捕获异常是否危险
- 在跨dll/so的注入类中使用异常是否安全?
- 如何检测在析构过程中异常是否处于活动状态
- 抛出c++标准库中定义的异常是否可以?
- 异常是否需要虚拟继承?
- 抛出异常是否影响errno或设置最后错误码
- 如果异常保存在std::exception_ptr中,那么在catch语句之外使用异常是否安全?