我在类上重载了一些操作,并注意到在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
这是我如何重载的问题,还是总是需要演员来获得我的预期输出?
答案 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+
应该按值返回。