我想了解NRVO在C++中的局限性。即使函数T val
有抛出的潜力,是否会对具有初始命名声明和单返回的函数针对NRVO进行优化并消除myFunc()
?
T myFunc(bool toThrow) {
T val;
if (toThrow) {
throw std::exception();
}
// Do other things here.
return val;
}
最佳答案
我在C++ Insights和Compiler Explorer上测试了您的代码的几个版本。
简短的答案是肯定的,编译器很可能会使用NRVO。
关于c++ - NRVO是否有效,但异常抛出体内?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/57121850/