我有一个自定义类,我为其定义了自定义广告operator char()
,称之为A
。现在,假设我想要一个这个类的数组,但是增加了一些功能,所以我定义了一个新的类B
来实现这个,使用array
类型的成员变量std::vector<A>
。
我希望B
要处理的一件事就是将其数据打印到屏幕上,这样我就创建了一个friend
函数
ostream& operator<<(ostream& out, const B& b)
{
// invoking custom cast works fine here
for(int i=0;i<array.size();++i) out.put((char)array[i]);
// without the following out.flush() we get segfault
out.flush()
}
出于某种原因,当我在结尾处省略out.flush()
语句时,会导致分段错误。我宁愿没有刷新,因为应该由用户选择何时刷新流(我相信?)所以任何人都可以澄清为什么它没有崩溃?
谢谢!
答案 0 :(得分:4)
你必须在那里归还一些东西。当然是你提供的流,所以你应该:
return out;
作为运营商的最后一行。请注意,也许是偶然的,调用out.flush()
做了一些寄存器(比如EAX)来保存流的值,从而返回(根据标准调用约定),这就是调用者所期望的。 但是你必须确保最后添加return
。