Próbowałem następujący kod:Przeciążenie operatora << i rekurencji
#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;
}
Kiedy skompilować & uruchomić ten, to zgodnie z oczekiwaniami; nieskończona pętla. Jeśli usuniemy instrukcję cout
wewnątrz funkcji znajomego, rekursja się nie stanie. Dlaczego tak jest?
Używam MinGW (Minimalistyczna wersja GNU dla Windows) btw. – legends2k
Jak można zauważyć, że rekursja się nie dzieje? Czy to właściwie kończy program? Czy po prostu nic nie drukuje i trzeba to zakończyć? (Zauważ, że rekursja ogona może sprawić, że nie otrzymasz przepełnienia stosu). –
@litb: Nieodparcie spadł z powrotem do terminala (nie nacisnąłem ani jednego klucza, żeby zabić proces). – legends2k