C++箴言:让=返回一个*this的引用
关于赋值的一个有趣的事情是你可以把它们穿成一串。
int x,y,z;
x = y = z = 15//赋值链
另一件有趣的事情是赋值是右组合的,所以,上面的赋值字符串可以这样解析:
x =(y =(z = 15));
这里把15赋给Z,然后把这个赋值的结果(最新的Z)赋给Y,再把这个赋值的结果(最新的Y)赋给x。
这里的方法是让赋值操作符返回对left参数的引用,这是在为类实现赋值操作符时应该遵循的约定:
类小部件{
公共:
...
Widget & operator =(const Widget & RHS)//返回类型是对
{ //当前类
...
返回* this//返回左边的对象
}
...
};
这个约定适用于所有的赋值操作符,而不仅仅是上面的标准形式。因此:
类小部件{
公共:
...
Widget & operator+=(const Widget & RHS)//该约定适用于
{ // +=,-=,*=,等等。
...
返回* this
}
Widget& operator=(int rhs) //即使
{ //运算符的参数类型
...//是非传统的
返回* this
}
...
};
这只是一个约定,代码不会按照这个意图来编译。在任何情况下,标准库中(或即将进入标准库)的所有内置类型和类型都遵守这个约定(例如string、vector、complex、tr1::shared_ptr等)。).除非你有一个好的理由去做一些不同的事情,否则不要毁了它。
要记住的事情
让赋值操作符返回对*this的引用。
位律师回复
0条评论