C++编译器会优化返回值代码吗?

pav*_*din 4 c++ rvo

让我们假设我使用Visual Studio或现代GCC与-O2.编译器会S在里面创建func()然后将其复制到a my_result,还是会my_result使用构造函数(5, 6, 5 + 6)创建而不创建临时S

注意: 函数func()定义及其用法在单独的.obj文件中!

struct S
{
    S(int _x, int _y, int _z) : x(_x), y(_y), z(_z) { }
    int x, y, z;
};

S func(int a, int b)
{
    return S(a, b, a + b);
}


/// USAGE ///

S my_result = func( 5, 6 );
Run Code Online (Sandbox Code Playgroud)

小智 7

现代编译器通常会优化这种操作.请参阅返回值优化