Je me demandais juste pourquoi ce code est incorrect? Il appelle constamment le constructeur Foo et provoque un débordement de pile après un certain temps. Pourquoi cette chaîne d'utilisation avec ostream provoque-t-elle stackoverflow?
#include <iostream>
using namespace std;
class Foo
{
std::string str;
public:
Foo(const string& s) : str(s)
{
cout << "Foo constructor" << endl;
}
friend ostream& operator<<(ostream& os,const Foo& foo);
};
ostream& operator<<(ostream& os,const Foo& foo)
{
os << foo.str;
return os;
}
int main()
{
Foo foo{"Hello"};
cout << foo;
cin.get();
}
Je sais, je sais qu'il est autorisé à écrire
cout << foo.str << endl;
ou os << foo.str.c_str();
mais je veux savoir pourquoi cette erreur se produit ..
Cela semble bien. Le problème doit être ailleurs. – juanchopanza
Peut-être que c'est un bug Visual C++? – ChaosDev
Ou quelque chose d'étrange dans 'cin.get()', que vous devriez probablement supprimer. – juanchopanza