このコードを VS2010 で実行すると、NRVO が適用されません。
#include <stdio.h>
class A
{
public:
A() { printf( "I am in constructor\n" ); }
A(const A& a) { printf( "I am in copy constructor\n" ); }
~A() { printf( "I am in destructor\n" ); }
int i;
};
A f(int j)
{
A a;
if ( j ) return a;
a.i = j;
return a;
}
int main()
{
A a;
a = f(5);
}
編集:これはデストラクタと関係があります。その行をコメントアウトすると、NRVO が使用されます。しかし、これはなぜですか?