C++:成员二进制加运算符的工作原理
C++: How member binary plus operator works?
我们有一个类(假设函数中有一些操作,但构造函数是默认的):
class X
{
public:
X& operator=(const X& rhs){}
const X& operator+(const X& rhs) const {}
const X& operator+(int m) {}
};
X a, b, c;
Q1: 为什么允许a = a + 5 + c;
而不允许a = b + c + 5;
?我们有:
错误 C2679 二进制"+":找不到右手运算符 类型为"int"的操作数(或没有可接受的转换)。
问题 2:为什么(c = a + a) = b + c;
从 b+c 操作开始而不是从 a+a 开始?(我在调试时发现了这一点)。
附言这只是理论上的问题。
为什么 a = a + 5 + c;允许和 a = b + c + 5; 不是?
const X& operator+(int m) {} 不是 const 函数,+ 运算符的返回值是 const X。 将其设置为常量函数,它将正常工作;(除了在此操作后返回引用很奇怪)
相关文章:
- 布尔比较运算符是如何在C++中工作的
- 在 c++ 中对字符串进行操作的关系运算符无法按预期工作
- C++编程:运算符重载中的引用如何工作?
- 编译"运算符删除"时C++编译器如何工作?
- C++,()运算符重载,它的工作是什么
- 错误:三元运算符无法在对象中正常工作"cout"
- 为什么重载运算符"="动态数组的类上无法正常工作?C++
- 为什么在C++中使用关系运算符创建的模板函数不能对字符串正常工作?
- C++自定义删除运算符不能正常工作?
- 为什么我的模运算符无法正常工作?
- ostream_iterator运算符=在pair<int,int>上失败,但在包装器类上工作。我不能为成对<>重载运算符<<吗?
- 变量地址的运算符[]是如何工作的
- 为什么我的类工作正常,即使在返回垃圾值作为赋值运算符和空复制构造函数的返回之后
- 如何使用while循环找到GCD?模数运算符是如何工作的
- 让类与运算符一起工作更简单的方法
- 枚举运算符不工作
- 为什么运算符"new"需要指针才能工作?
- 有人可以解释速记赋值运算符的实际工作原理吗?
- 不工作 复制分配运算符
- 返回对象如何与分配运算符一起工作