是否有可能为我的类 C
设计重载的 operator+
以使其成为可能:
C&& c = c1 + c2;
但这不可能:
c1 + c2 = something;
编辑:
我将对象更改为小写字母。 c1
、c2
和c
是类C
的对象。 &&
不是逻辑运算符&&
,而是右值引用。
例如写:
double&& d = 1.0 + 2.0;
是 100% 正确的(新的)C++ 代码,而
1.0 + 2.0 = 4.0;
显然是编译器错误。我希望 完全 相同,但我的类 C
不是双倍的。
第二次编辑: 如果我的运算符返回 C 或 C&,我可以对右值引用进行赋值,但也可以对 c1 + c2 进行赋值,这是毫无意义的。在这里给出 const 会禁用它,但是它也会禁用对右值的赋值。至少在 VC++ 2k10 上。那么这是多少倍呢?
最佳答案
让赋值运算符只能在左值上调用:
class C
{
// ...
public:
C& operator=(const C&) & = default;
};
请注意右括号后的单个与号。它阻止分配给右值。
关于c++ - 允许使用右值捕获但不分配给的运算符重载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29934487/