Tôi đã thử các mã sau:quá tải << nhà điều hành và đệ quy
#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;
}
Khi tôi biên dịch & chạy này, nó như mong đợi; một vòng lặp vô hạn. Nếu tôi xóa câu lệnh cout
bên trong chức năng bạn bè, việc đệ quy sẽ không xảy ra. Tại sao nó như vậy?
Đang sử dụng MinGW (GNU tối thiểu cho Windows) btw. – legends2k
Làm thế nào để bạn nhận thấy sự đệ quy không xảy ra? Nó có kết thúc chương trình đúng không? Hay nó không in được gì và bạn phải chấm dứt nó? (Lưu ý rằng việc đệ quy đuôi có thể khiến bạn không nhận được tràn ngăn xếp). –
@ litb: Vô tình rơi xuống nhà ga (tôi không nhấn một phím nào để giết quá trình này). – legends2k