首先必须说的是,在c++编译器中有一种算法没事找事,叫做Named ReturnValue(NRV)优化,NRV优化如今被视为标准C++编译器的一个义不容辞的优化操作(虽然其需求其实超出了正式标准之外)。看清楚ReturnValue,理解什么意思了吧,你懂得!!!!
产生临时对象的条件:
1.以值的方式给函数传递参数
http://blog.csdn.net/daringpig/article/details/6565075;
产生临时对象的条件:
1.以值的方式给函数传递参数
2.函数的返回一个对象时(编译器优化的地方,比较恶心 哈哈),不是返回引用呦
3.类型转换(咱不解释)
#include <iostream>
using namespace std;
class A
{
public:
A(){cout<<"A is construting..."<<endl;}
A(const A& a){cout<<"A is cloning..."<<endl;}
~A(){cout<<"A is deconstructing..."<<endl;}
};
void func()
{
}
A func1( A a){
return a;
}
A func2( A &a)
{
return a;
}
A &func3( A a) //这种情况下不合理,因为返回了局部对象的引用,会出现警告
{
return a;
}
int main( ){ A a;
func();
A b = func1(a);
A c = func2(a);
A d = func3(a);
}
参考文章
http://blog.csdn.net/zxy_snow/article/details/7241820;http://blog.csdn.net/daringpig/article/details/6565075;