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;
}
Nel codice di cui sopra, se la linea marcata viene rimosso, ci sarà un errore di segmento, qualcuno può spiegare perché?sovraccaricato ostream colpa dell'operatore di segmentazione se non endl
Perché nessuno mai si preoccupa di controllare il codice in questione? Il compilatore avrebbe dovuto avvertirti di tale errore - "... avviso: nessuna dichiarazione di ritorno in funzione che restituisce non vuoto [-Wreturn-type]" Vedi http://liveworkspace.org/code/2ygK20$1 } ^ – SChepurin