ostream的和放;运营商LT;< segfaults没有flush()

时间:2011-09-14 22:44:45

标签: c++ operators iostream

我有一个自定义类,我为其定义了自定义广告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()语句时,会导致分段错误。我宁愿没有刷新,因为应该由用户选择何时刷新流(我相信?)所以任何人都可以澄清为什么它没有崩溃?

谢谢!

1 个答案:

答案 0 :(得分:4)

你必须在那里归还一些东西。当然是你提供的流,所以你应该:

return out;

作为运营商的最后一行。请注意,也许是偶然的,调用out.flush()做了一些寄存器(比如EAX)来保存流的值,从而返回(根据标准调用约定),这就是调用者所期望的。 但是你必须确保最后添加return