复制内容到剪贴板
代码:
嘿嘿,我自己先翻了翻书,得到如下结果,如有不妥之处,还请指正.
还有,我感觉可能自己没有把问题说清楚.在<c++ primer>中有这
么一段,假设有下面一个类:
class CA
{
public:
CA():a(0),b(0),c(0){};
int m_a;
int m_b;
int m_c;
CA& operator+=(const CA& rhs)
{
this->a+=rhs.a;
this->b+=rhs.b;
this->c+=rhs.c;
return *this;
}
};
CA operator+(const CA& lhs,const CA& rhs)
{
CA ret(lhs);
ret+=rhs;
return ret;
}
这样以来,如果这样的语句CA c_one,c_two,c_three;
如果这样一句c_three=c_one+c_two;就是正确的.
也可以这样:c_three+=c_two;和内置类型的操作相同.
如果这样:(c_three+=c_two)=c_one;则把c_one的值赋给c_three.
可以看到,如果返回值是局部变量对象,该返回值只可以做右值.
如果返回局部引用或指针,则是一个错误.
如果返回一个全局变量对象,则可以做右值,也可以做左值.
如果是返回一个全局变量的引用或指针,则可以做右值,也可以做左值.
在类中,只需和内置类型具有相同的行为即可.
从效率上讲,传回一个引用更有效率,因为返回一个对象是要复制一个临时对象的.