C ++:成员二进制加运算符如何工作?

时间:2017-01-31 14:02:07

标签: c++ binary overloading operator-keyword member

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

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'类型的操作数(或没有可接受的转换)。

Q2 :为什么(c = a + a) = b + c;以b + c操作开头而不是+ a? (我在调试时发现了这一点。)

P.S。这只是理论问题。

1 个答案:

答案 0 :(得分:1)

  

为什么a = a + 5 + c;允许和a = b + c + 5;不是吗?

const X& operator +(int m){}不是const函数,+运算符的返回值是const X.将它作为const函数,它将正常工作; (除了在此操作后返回引用非常奇怪)