Tim*_*Tim 6 c++ reference assignment-operator
在C++中重载类的赋值运算符时,它的参数必须是引用吗?
例如,
class MyClass {
public:
...
MyClass & operator=(const MyClass &rhs);
...
}
Run Code Online (Sandbox Code Playgroud)
是真的吗
class MyClass {
public:
...
MyClass & operator=(const MyClass rhs);
...
}
Run Code Online (Sandbox Code Playgroud)
?
谢谢!
重载赋值运算符的参数可以是任何类型,它可以通过引用或值传递(好吧,如果类型不是可复制构造的,那么显然不能通过值传递).
因此,例如,您可以使用一个赋值运算符int作为参数:
MyClass& operator=(int);
Run Code Online (Sandbox Code Playgroud)
复制赋值运算符是赋值运算符的特例.它是任何赋值运算符,它通过值或引用获取与类相同的类型(引用可以是const或volatile限定的).
如果您没有显式实现某种形式的复制赋值运算符,那么编译器将隐式声明并实现一个.
C++运算符重载指南建议,赋值运算符获取const引用.根据网站,原因是我们不想改变参数(因为const),而只是操作符的左侧.因此,它节省了通过引用传递它的时间.
它还指出了为什么赋值运算符返回引用的原因 - 运算符链接.为了得到a = (b = 1)工作,这是必要的,(b = 1)返回可分配引用(=)来a.