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

时间:2015-12-06 19:37:28

标签: c++

我在类上重载了一些操作,并注意到在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

这是我如何重载的问题,还是总是需要演员来获得我的预期输出?

1 个答案:

答案 0 :(得分:4)

您的ffmpeg -i 1.mp3 -i 2.mp3 -filter_complex \ "[0:a]volume=0.5[a0]; \ [1:a]volume=6dB[a1]; \ [a0][a1]amerge=inputs=2[a]" -map "[a]" -ac 2 -c:a libfdk_aac output.m4a 会返回对本地变量的引用,并返回一个临时变量。

它是悬空参考

operator+应该按值返回。