在下面的代码示例中,取消注释行// fun() = 1;
将导致编译错误,因为fun
返回rvalue。我不明白为什么行(B1 + B2) = B0;
不会导致编译错误?不重载运算符在语义上与函数调用相同吗?在这种情况下,B1 + B2
也应该返回一个右值,所以这不应该导致编译错误吗?
#include<iostream>
class Base {
public:
int X = 0;
};
Base operator+(Base b1, Base b2) {
Base b;
b.X = b1.X + b2.X;
return b;
}
int fun () {
int x;
return x;
}
int main () {
// fun() = 1;
Base B0,B1,B2;
(B1 + B2) = B0;
return 0;
}