class foo {
public:
friend ostream& operator << (ostream &os, const foo &f);
foo(int n) : a(n) {}
private:
vector <int> a;
};
ostream& operator << (ostream &os, const foo &f) {
for (int i = 0; i < f.a.size(); ++i)
os << f.a[i] << " ";
os << endl; // why is this line a must?
}
int main(void) {
foo f(2);
cout << f << endl;
return 0;
}
上記のコードでは、マークされた行が削除されると、セグメントのフォールトエラーが発生します。endstreamがない場合にオーバーロードされたostream演算子のセグメント化エラー
?コンパイラは、このようなエラーについて警告していたはずです - "...警告:非void [-Wreturn-type]を返す関数でreturn文がありません" ^ – SChepurin