ich den folgenden Code versucht:Überlastung Operator << und Rekursion
#include <iostream>
using std::cout;
using std::ostream;
class X
{
public:
friend ostream& operator<<(ostream &os, const X& obj)
{
cout << "hehe"; // comment this and infinite loop is gone
return (os << obj);
}
};
int main()
{
X x;
cout << x;
return 0;
}
Als ich & laufen diese kompilieren, ist es wie erwartet; eine Endlosschleife. Wenn ich die cout
Anweisung innerhalb der Friend-Funktion entferne, tritt die Rekursion nicht auf. Wieso ist es so?
Bin mit MinGW (Minimalist GNU für Windows) BTW. – legends2k
Wie bemerken Sie, dass die Rekursion nicht stattfindet? Beendet es das Programm richtig? Oder druckt es einfach nichts und du musst es beenden? (Beachten Sie, dass die Tail-Rekursion dazu führen kann, dass Sie keinen Stack-Überlauf erhalten). –
@litb: Es fiel sofort auf das Terminal (ich habe keine einzige Taste gedrückt, um den Prozess zu beenden). – legends2k