输出等于20。为什么返回值不是30?

class Myclass
{
public:
    int result;

    Myclass() { result = 10; }

    Myclass operator+ (Myclass& obj) {
        Myclass tempObj;
        tempObj.result += obj.result;
        return tempObj;
    }
};

int main()
{
    Myclass obj1, obj2, obj3;
    cout << (obj1 + obj2 + obj3).result;
}
如果我正确理解,则obj2 + obj3返回tempObj的结果=20。下一步是加法tempObj + obj1,这应该再次返回tempObj但结果= 30。

最佳答案

运营商内部

Myclass operator+ (Myclass& obj) {
    Myclass tempObj;
    tempObj.result += obj.result;
    return tempObj;
}
创建了一个本地对象tempObj,其数据成员result始终由10初始化。
因此,尽管由子表达式创建的临时对象
obj1 + obj2
数据成员result等于20,但是其值将被忽略。
看来你是说
Myclass operator+ (Myclass& obj) {
    Myclass tempObj( *this );
    tempObj.result += obj.result;
    return tempObj;
}
请注意,该参数应具有恒定的引用类型,并且运算符本身应恒定。例如
Myclass operator+ ( const Myclass& obj) const {
    Myclass tempObj( *this );
    tempObj.result += obj.result;
    return tempObj;
}

07-25 23:46