我们有一个类(假设函数中有一些操作,但构造函数是默认的):
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。这只是理论问题。
答案 0 :(得分:1)
为什么a = a + 5 + c;允许和a = b + c + 5;不是吗?
const X& operator +(int m){}不是const函数,+运算符的返回值是const X.将它作为const函数,它将正常工作; (除了在此操作后返回引用非常奇怪)