【发布时间】:2019-07-20 04:36:51
【问题描述】:
我希望了解 NRVO 在 C++ 中的局限性。即使函数 myFunc() 具有抛出潜力,是否会针对 NRVO 和省略 T val 优化具有初始命名声明和单个返回的函数?
T myFunc(bool toThrow) {
T val;
if (toThrow) {
throw std::exception();
}
// Do other things here.
return val;
}
【问题讨论】:
-
你试过了吗?编译器是否使用了 NRVO?如果是这样,那么它可能可以。
-
我想这取决于
T究竟是什么。 -
@Zereges 我会想到同样的事情,但我找不到让 Clang not 使用 NRVO,即使对于在构造函数和析构函数中都有副作用的类型也是如此。
标签: c++ copy-elision nrvo