操作符重载,允许捕获右值,但不允许赋值

Operator overload which permits capturing with rvalue but not assigning to

本文关键字:不允许 赋值 许捕获 重载 操作符      更新时间:2023-10-16

是否有可能设计和如何使我的类C重载operator+有这个可能:

C&& c = c1 + c2;

但这是不可能的:

c1 + c2 = something;

编辑:我把对象改成了小写字母。c1c2cC类对象。&&不是逻辑的operator&&,而是一个右值引用。

例如:

double&& d = 1.0 + 2.0;

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

1.0 + 2.0 = 4.0;

显然是一个编译错误。我希望完全相同,但不是double,对于我的类C

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

赋值操作符只能在左值上调用:

class C
{
    // ...
public:
    C& operator=(const C&) & = default;
};

注意右括号后面有一个&号。