#include<iostream>
using namespace std;
class aClass
{
public:
char *message;
aClass(const char *message);
~aClass(){delete[] message;}
};
aClass::aClass(const char* newmessage)
{
message = new char[strlen(newmessage) +1];
strcpy(message,newmessage);
}
const ostream& operator<<(const ostream& o, const aClass &a)
{
o << a.message;
return o;
}
int main()
{
aClass b("Hello");
cout << b;
}
有人可以向我解释为什么上面的代码会产生无限循环吗?
答案 0 :(得分:11)
因为const
不应该是:
///// /////
const ostream& operator<<(const ostream& o, const aClass &a)
输出流假设为非const;毕竟,输出数据正在发生变化。所以当你这样做时:
o << a.message;
它不能使用char*
的正常重载,因为那个操作在非const流上。相反,它会搜索适当的重载并找到你的,确定它可以从aClass
构造a.message
(因为你的构造函数不是explicit
),这样做并调用它。这永远重复。
应该写成:
ostream& operator<<(ostream& o, const aClass &a)
{
o << a.message;
return o;
}