class test
{
public:
int data;
test(int var = 0):data(var){cout<<"constructor"<<endl;}
~test(){ cout<<"destructor"<<endl; }
test(const test& var)
{
cout<<"copy constructor"<<endl;
this->data = var.data;
}
test& operator=( const test& var)
{
cout<<"assignment op"<<endl;
this->data = var.data;
return *this;
}
};
test passByref_returnByVal(test& obj)
{
return obj;
}
int main()
{
test o1(5);
test o2 = passByref_returnByVal(o1);
cout<<"=========================="<<endl;
test o3;
o3 = passByref_returnByVal(o1);
}
输出:
constructor
copy constructor
constructor
copy constructor
assignment op
destructor
在给定的示例中,对象o2
是直接复制构造的,不使用任何临时对象。
但是在第二种情况下,我想o3
分配函数的返回值,首先使用复制构造函数创建一个临时值,然后调用赋值运算符进行值赋值。
我的问题是,当我的赋值运算符参考时,这个临时的需要是什么。我找到了相关的问题,但他们没有回答这个问题。