Skip to content

Latest commit

 

History

History
52 lines (42 loc) · 1.02 KB

File metadata and controls

52 lines (42 loc) · 1.02 KB

条款10:令operator=返回一个reference to *this

关于赋值,有趣的是你可以把它们写成连锁形式:

int x, y, z;
x = y = z = 15;

同样有趣的是,赋值采用右结合律,所以上述连锁赋值被解析为:

x = (y = (x = 15));

为了实现连锁赋值,赋值运算符必须返回一个引用指向操作符的左侧实参。这是你为class实现赋值运算符时应该遵循的协议:

class Widget {
public:
  ...
  Widget& operator(const Widget& rhs) {
    ...
    return *this;
  }
  ...
};

这个协议不仅适用于以上标准赋值形式,也适用于所有赋值相关运算,例如:

class Widget {
public:
 	... 	
  Widget& operator+=(const Widget& rhs) {
    ...
    return *this;  
  }
  Widget& operator=(int rhs) {
    ...
    return *this;
  }
  ...
};

注意,这只是个协议,并无强制性。如果不遵循它,代码一样可以通过编译。

请记住

  • 令赋值运算符返回一个reference to *this