运算符重载函数的C ++函数返回值类别?

时间:2016-07-29 18:19:24

标签: c++ lvalue rvalue

在下面的代码示例中,取消注释行// 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;
}

0 个答案:

没有答案