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

    为何非要返回 *this 呢? c++

    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") ; this

    c = temp; code

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

相关文章
相关标签/搜索