class A{
private:
int data;
public:
A(int x=0):data(x){}
A get1();
A get2();
};
A A::get1(){
return A(3);
}
A A::get2(){
A a;
a.data=3;
return A;
}
``这两种到底有什么区别啊
如果再把返回类型改成A&呢,又有什么区别呢
A a=get1(),b=get2();
究竟是局部变量先销毁还是先赋值
区别很小,主要区别是效率,
不过开优化以后,这点区别就不很重要了
#if 1
#include
using namespace std;
class A{
private:
int data;
public:
A(int x = 0) :data(x){ cout << "构造" << endl; }
A(A&ref){ cout << "拷贝" << endl; }
A get1();
A get2();
};
A A::get1(){
return A(3); //只掉构造
}
A A::get2(){
A a;
a.data = 3;
return A(); //只掉构造
}
int main()
{
A a;
a.get1();
a.get2();
return 0;
}
#endif
//这一块编译器已经优化掉了...因为此时临时对象已经构造出来了...