Мне просто интересно, почему этот код неверен? Он постоянно вызывает конструктор Foo и вызывает переполнение стека через некоторое время. Почему эта строка использования с ostream вызывает 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();
}
Я знаю, я знаю, что это нормально, чтобы написать
cout << foo.str << endl;
или os << foo.str.c_str();
, но я хочу знать, почему это происходит ошибка ..
Все хорошо. Проблема должна быть в другом месте. – juanchopanza
Возможно, это ошибка Visual C++? – ChaosDev
Или что-то странное в 'cin.get()', которое вы, вероятно, должны удалить. – juanchopanza