操作符重载,允许捕获右值,但不允许赋值
Operator overload which permits capturing with rvalue but not assigning to
是否有可能设计和如何使我的类C
重载operator+
有这个可能:
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;
显然是一个编译错误。我希望与完全相同,但不是double,对于我的类C
。
第二个编辑:如果我的操作符返回C或C&,我可以赋值给右值引用,也可以赋值给c1 + c2,这是没有意义的。这里给出const会禁用它,但是也会禁用对右值的赋值。至少在vc++ 2k10上。那么这个是多少倍呢?
赋值操作符只能在左值上调用:
class C
{
// ...
public:
C& operator=(const C&) & = default;
};
注意右括号后面有一个&号。
相关文章:
- C++ 基本 CTOR 说明 - 为什么不调用赋值/复制构造函数
- 如何制作不允许重复值的 C++ int 数组循环?
- 如何在不使用赋值运算符的情况下为动态变量赋值?
- 为什么我可以在不使用赋值运算符的情况下使用列表初始化普通数组
- 为什么常量字符 INITIAL='G' 不是赋值语句?
- 初始化对象后,用隐式转换而不是赋值运算符调用构造函数有什么意义
- 使用重载运算符+而不进行赋值
- 重载运算符 = 不使用赋值进行编译
- C++直接插入到std::map中,而不使用赋值运算符
- 不带赋值运算符的位NOT操作-可能
- 不能赋值:左键需要作为赋值的左操作数
- 如何在不重载赋值运算符的情况下运行此代码
- C++ 不调用赋值运算符
- C++11:为什么允许赋值右值
- 如何在不使用赋值运算符的情况下为变量赋值
- 不允许赋值和传递值
- 调用了Copy构造函数而不是赋值运算符
- 只读变量是不能赋值的c++模板函数
- 为什么我不能赋值给一个私有变量在c++类
- 操作符重载,允许捕获右值,但不允许赋值