其他分享
首页 > 其他分享> > c – 运算符重载,允许使用rvalue进行捕获但不能分配

c – 运算符重载,允许使用rvalue进行捕获但不能分配

作者:互联网

是否可以设计以及如何为我的C类重载操作符以使其成为可能:

C&& c = c1 + c2;

但这不可能:

c1 + c2 = something;

编辑:
我把对象改成小写字母. c1,c2和c是C类的对象.&&不是逻辑运算符&&,而是rvalue引用.

例如写作:

double&& d = 1.0 + 2.0;

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

1.0 + 2.0 = 4.0;

显然是一个编译器错误.我希望完全相同,但对于我的班级C而言,我想要双倍.

第二次编辑:
如果我的操作符返回C或C&,我可以赋值给rvalue引用,但也可以赋值给c1 c2,这是无意义的.给const这里禁用它,但它也禁用了对rvalue的赋值.至少在VC 2k10上.那么这有多重?

解决方法:

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

class C
{
    // ...

public:

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

请注意右括号后的单个&符号.它会阻止分配rvalues.

标签:c,c11,operator-overloading,rvalue-reference
来源: https://codeday.me/bug/20190927/1823814.html