c++ - 允许使用右值捕获但不分配给的运算符重载

标签 c++ operator-overloading c++11 rvalue-reference

是否有可能为我的类 C 设计重载的 operator+ 以使其成为可能:

C&& c = c1 + c2;

但这不可能:

c1 + c2 = something;

编辑: 我将对象更改为小写字母。 c1c2c 是类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/

相关文章:

c# - 如何创建包含 const 内容的 C# 列表?

c++ - C++中的赋值运算符重载

c++ - 重载运算符有什么问题?

c++函数在之后立即调用析构函数

c++ - 在 C++ 中操作成对 vector 的值之一

c++ - 使用 boost 实现 C++11 lambda

c++ - 使用 gdb backtrace 调试 MPI 代码

c++ - 系统托盘中的菜单没有每个 QActions

c++ - 以 mm/dd/yyyy 格式输入日期并将其拆分为 3 个单独的变量?

swift - 我可以使用自定义赋值运算符初始化变量吗?