我想了解NRVO在C++中的局限性。即使函数T val有抛出的潜力,是否会对具有初始命名声明和单返回的函数针对NRVO进行优化并消除myFunc()

T myFunc(bool toThrow) {
    T val;

    if (toThrow) {
        throw std::exception();
    }

    // Do other things here.

    return val;
}

最佳答案

我在C++ InsightsCompiler Explorer上测试了您的代码的几个版本。

简短的答案是肯定的,编译器很可能会使用NRVO。

关于c++ - NRVO是否有效,但异常抛出体内?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/57121850/

10-13 08:26