1.函数返回一个对象
创建一个临时对象,会调用拷贝构造函数,此对象为纯右值,不可以取地址,需要赋值给一个左值。
2.函数返回一个引用
同样创建一个临时对象,但此时的值可以直接取地址,即此时不是一个纯右值?
class object {
public:
int val;
object(int val = -1):val(val){}
object(object& obj){
val = obj.val;
printf("拷贝构造函数\n");
}
~object() {
printf("析构函数\n");
}
object operator=(object& a) {
val = a.val;
printf("调用 operator= \n");
return a;
}
friend object operator--(object& a);
friend object operator--(object& a, int x);
/*即在此处,若是 object 而拷贝构造函数中是引用*/
object& operator++() {
++val; return *this;
}
};
object a;
object b(3);
a = ++b; // 若运算符重载处是 返回对象则编译不通过