【发布时间】:2011-08-18 22:09:16
【问题描述】:
是否可以设计以及我应该如何为我的班级operator+ 重载C 以实现这一点:
C&& c = c1 + c2;
但这不可能:
c1 + c2 = something;
编辑:
我将对象更改为小写字母。 c1、c2 和 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 上。那么这个是多少倍呢?
【问题讨论】:
-
这没有任何意义!请提供更多详细信息。
-
请解释您的代码示例的语义(预期结果)。
-
不会
double&& d = 1. + 2.;创建一个悬空引用吗?另外,不能只按值返回吗? -
正如我所说,如果我按值返回,那么 c1 + c2 = 某些事情将成为可能,这不是我想要的。
-
@Fred:我不知道他们已经扩展了规则以包含 r 值引用,但我想他们会这样做是有道理的。
标签: c++ operator-overloading c++11 rvalue-reference