【发布时间】:2012-09-27 09:10:42
【问题描述】:
最近,我关注了一个关于 C++ 中表达式赋值的讨论,如下例所示:
string s1, s2, s3;
(s1 + s2) = s3;
使用 C++11,可以将赋值运算符限制为左值引用(在左侧)。当如下声明赋值运算符时,编译器 Clang 会因为类型不兼容而拒绝代码并显示错误消息。
auto operator=(const string& rhs) & -> string&;
auto operator=(string&& rhs) & -> string&;
我在任何地方都没有看到这个。是否有充分的理由不为赋值运算符使用左值引用限定符(除了在大多数编译器中缺少支持)?
【问题讨论】:
-
一个原因是大多数编译器还不支持该语法。另一个是它不能解决主要问题。这种错误发生的频率如何?
-
我认为它确实发生了。
if (somefunc() = value)当然,大多数编译器都会为此发出警告,但并非在所有情况下。
标签: c++ c++11 operator-overloading assignment-operator