[effective c++] 让operator=返回*this的引用

    为什么非要返回 *this 呢?

    Effictive c++是这么解释的:当定义自己的赋值运算符时,必须返回赋值运算符左边参数的引用,*this。如果不这样做,就会导致不能连续赋值,或导致调用时的隐式类型转换不能进行,或两种情况同时发生。

   这里使用string类来说明:

string& string::operator=(const string& rhs)
{
   ... //先要判断是不是同一个对象
   ...
   return *this;	// 返回左边的对象
}
这是正确的写法。但是如果下面的写就错了,以为 参数是const类型,返回值是非const类型,c++语法规定无法把const对象赋值给非const对象,所以编译不会通过。
string& string::operator=(const string& rhs)
{
...
return rhs;	// 返回右边的对象
}

     你会说,把函数参数改为非const不行吗?如果改为非const,第二种情况会编译通过,但是在赋值的时候 :

    string c = "just" ; "just" 是一个字符数组,类型不匹配,编辑器会产生一个临时的

    const string temp("just") ;

    c = temp;

    注意临时值是一个const。这很重要,因为它可以防止传递到函数内的临时值被修改。否则,程序员就会很奇怪地发现,只有编译器产生的临时值可以修改而他们在函数调用时实际传进去的参数却不行。

  


你可能感兴趣的:([effective c++] 让operator=返回*this的引用)