临时变量,RVO,函数返回引用等等...
开是查临时变量的相关资料
class A
{
public:
A()
{
cout<<"default construction"<<endl;
}
A(const A&)
{
cout<<"copy construction"<<endl;
}
A& operator =(const A& a)
{
cout<<"operator ="<<endl;
}
~A()
{
cout<<"destruction"<<endl;
}
int m;
};
A func()
{
A a;
//cout<<&a<<endl;
return a;
//return A();
}
情况1: A a1=func();
结果是调用 defaul construction
copy construction
destruction
说明没有产生中间变量,此时a1的初始化是调用的copy
情况2:A a2; a2=func();
结果是
default construction a2
default construction func()里的a
copy construction 产生临时对象
destruction a2销毁
operator = 调用=给a2赋值
destruction 临时对象销毁
此时很清楚的看到产生临时对象。
返回值优化(Return Value Optimization,简称RVO)是编译器的一种优化
如果把函数func改为 {return A();}
情况1:default construction(只有一次调用 太给力了)
情况2:
default construction
default construction
operator =
destruction
减少了 1次copy 1次des,没有产生中的临时对象了。

浙公网安备 33010602011771号