我希望了解 NRVO 在 C++ 中的局限性。具有初始命名声明和单个返回的函数是否会针对 NRVO 和 elide 进行优化T val
,即使该函数myFunc()
具有抛出潜力?
T myFunc(bool toThrow) {
T val;
if (toThrow) {
throw std::exception();
}
// Do other things here.
return val;
}
我希望了解 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++ Insights和Compiler Explorer上测试了您的代码的几个版本。
简短的回答是肯定的,编译器很可能会使用 NRVO。