NRVO 是否有效,但异常扔进身体

Is NRVO valid with exception throwing in body?

本文关键字:异常 是否 有效 NRVO      更新时间:2023-10-16

我想了解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。