7

是否可以设计以及我应该如何让operator+我的班级重载C才能实现这一点:

C&& c = c1 + c2;

但这不可能:

c1 + c2 = something;

编辑:我将对象更改为小写字母。c1c2并且c是类的对象C&&不是逻辑的operator&&,而是右值引用。

例如写作:

double&& d = 1.0 + 2.0;

是 100% 正确的(新)C++ 代码,而

1.0 + 2.0 = 4.0;

显然是编译器错误。对于我的班级,我想要完全相同,但要加倍C

第二次编辑: 如果我的运算符返回 C 或 C&,我可以赋值给右值引用,也可以赋值给 c1 + c2,这是没有意义的。在这里给出 const 会禁用它,但是它也会禁用对右值的分配。至少在 VC++ 2k10 上。那么这个是多少倍呢?

4

1 回答 1

14

让赋值运算符只能在左值上调用:

class C
{
    // ...

public:

    C& operator=(const C&) & = default;
};

请注意右括号后的单个 & 符号。它防止分配给右值。

于 2011-05-04T22:34:00.357 回答