最近,我关注了一个有关C ++中表达式赋值的讨论,如下例所示:
string s1, s2, s3;
(s1 + s2) = s3;
在C++11中,可以将赋值运算符限制为左值引用(在左侧)。声明赋值运算符如下所示时,编译器Clang由于不兼容的类型而拒绝代码,并显示错误消息。
auto operator=(const string& rhs) & -> string&;
auto operator=(string&& rhs) & -> string&;
我在任何地方都没有看到这个问题。除了大多数编译器不支持以外,是否存在不使用lvalue引用限定符进行赋值运算符的好理由?
if (somefunc() = value)
当然,大多数编译器都会对此发出警告,但并非所有情况都是如此。 - Tamás Szelei