我尝试了以下代码:
#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;
}
当我编译并运行它时,它符合预期;一个无限循环。如果我删除cout
朋友函数中的语句,则不会发生递归。为什么会这样?