C++运算符重载流需要强制转换

C++ operator overloading stream requires cast

本文关键字:转换 运算符 重载 C++      更新时间:2023-10-16

我正在重载一个类上的一些操作,注意到在ostream上重载其中一个值并不像预期的那样。以下是示例:

#include <iostream>
using namespace std;
class Simple{
    int x;
public:
    Simple() : x(0){}
    Simple(int i) : x(i){}
    const Simple& operator+(const Simple& s){
        return Simple(x + s.x);
    }
    friend ostream& operator<<(ostream& os, const Simple& s);
};
ostream& operator<<(ostream& os, const Simple& s){
    os << s.x;
    return os;
}
int main(void){
    Simple s1(2);
    Simple s2(3);
    cout << "s1 = " << s1 << endl;
    cout << "s2 = " << s2 << endl;
    cout << "s1 + s2 = ";
    Simple s3 = s1 + s2;
    cout << s1 << " + " << s2 <<  " = " << s1 + s2 << endl;
    cout << s1 << " + " << s2 <<  " = " << static_cast<Simple>(s1 + s2) << endl;
    cout << "s3 = " << s3 << endl;
    return 0;
}

它产生以下输出:

s1=2

s2=3

s1+s2=2+3=-872483744

2+3=5

s3=5

这是我如何重载的问题吗?还是总是需要强制转换来获得我期望的输出?

您的operator+返回一个对局部变量的引用,以及一个临时变量。

这是一个悬空引用

operator+应按值返回。