【发布时间】:2011-01-22 06:05:00
【问题描述】:
我尝试了以下代码:
#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 语句,则不会发生递归。为什么会这样?
【问题讨论】:
-
顺便说一句,我正在使用 MinGW(Minimalist GNU for Windows)。
-
您如何注意到没有发生递归?它是否正确结束程序?还是它只是不打印任何东西而您必须终止它? (请注意,尾递归可能会使您不会收到堆栈溢出)。
-
@litb:它立即退回到终端(我没有按一个键来终止进程)。
-
@litb:我尝试通过
gdb运行二进制文件,它显示SIGSEGV:) 感谢您的评论,也许您应该将其写为答案!它因堆栈溢出而崩溃!!耶! -
作为堆栈溢出的这个问题,我认为它绝对应该去meta。
标签: c++ recursion operator-overloading cout ostream