почему перегрузка оператора<< должна возвращаться по ссылке?

Я хочу распечатать объект пользовательского типа, вот так cout << ob1; поэтому я хочу перегрузить оператор << и я хочу вернуть значение не по ссылке, но это дает мне ошибку: в двух файлах с именем: iosfwd и ios_base.h

ostream operator<<( ostream& out, cat& rhs){
    out << rhs.a << ", " << rhs.b << endl;
    return out ; 
}

1) Является ли это потому, что он не может создать новый объект ostream, поэтому он должен возвращаться по ссылке?

но когда я возвращаюсь по ссылке вот так:

ostream& operator<<( ostream& out, cat& rhs){
    out << rhs.a << ", " << rhs.b << endl;
    return out ;
}

все работает нормально.
2) любое объяснение?

5
задан AlexDan 10 March 2012 в 13:41
поделиться