?
?
?
二、Constructors,Destructors and Assignment Operators
?
Rule 10:Have assignment operators return a reference to *this
规则10:令operator= 返回一个 reference to *this
?
?
关于赋值,有一个很有趣的连锁代码:
?
int x,y,z; x = y = z = 15; // 赋值的连锁形式
而且,C++采用右结合律,如果用括号来代表优先计算顺序,就是这样的:
?
?
x = ( y = ( z = 15 ) ) ;
?
C++中,为了实现“连锁赋值”,赋值操作符必须返回一个reference指向操作符的左侧实参。(注意,这是classes 实现赋值操作符时应该遵循的协议)
?
class Widget {
public:
...
Widget& operator=( const Widget& rhs ) // 返回类型是个reference
{
...
return* this; // 返回左侧对象
}
...
};
而且这个协议不仅适用于以上的标准赋值形式,也适用于所有赋值相关的运算,比如+=、-=、*= 等:
?
?
Widget& operator+=( const Widget& rhs )
{
...
return *this;
}
但是,要注意这只是一个协定,并无强制性,如果不遵循它,代码一样可以通过编译。然而这份协议被所有内置类型和标准程序库提供的类型,如 string、vector、complex,trl::shared_ptr 等共同遵守。
?
所以除非有足够的理由去另类一下,不然还是从众吧。
?
☆请记住
令 assignment(赋值) 操作符返回一个 reference to *this。
?
?
?
***************************************转载请注明出处:http://blog.csdn.net/lttree********************************************