C++:成员二进制加运算符的工作原理

C++: How member binary plus operator works?

本文关键字:工作 运算符 成员 二进制 C++      更新时间:2023-10-16

我们有一个类(假设函数中有一些操作,但构造函数是默认的):

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。 将其设置为常量函数,它将正常工作;(除了在此操作后返回引用很奇怪)