根据此article,赋值运算符可以具有以下形式之一:
(1) MyClass& operator=( const MyClass& rhs );
(2) MyClass& operator=( MyClass& rhs );
(3) MyClass& operator=( MyClass rhs );
(4) const MyClass& operator=( const MyClass& rhs );
(5) const MyClass& operator=( MyClass& rhs );
(6) const MyClass& operator=( MyClass rhs );
(7) MyClass operator=( const MyClass& rhs );
(8) MyClass operator=( MyClass& rhs );
(9) MyClass operator=( MyClass rhs );
我的问题是:我何时应该使用哪种返回类型MyClass
,MyClass &
或const MyClass &
?
答案 0 :(得分:1)
它实际上不仅仅是过时的,而是错误的。赋值运算符(成员operator=
)可以为多种类型重载,而不仅仅是类类型本身,并且返回类型根本不受限制。
作为一种风格问题,为了与内置类型保持一致,返回对象的非const引用是很常见的,但我个人更喜欢void
。这使得(几乎)不可能将赋值表达式用作子表达式,如a=b && c=d
中所示。我认为这是一个优势。
正如评论所说,C ++ 11添加了移动操作,因此您应该考虑void MyClass::operator=(MyClass&&)
是否对您有益。