[英]ostream& operator<< segfaults without flush()
我有一个自定义类,我已经定义了一个自定义的转换operator char()
,称之为A
现在,假设我想要一个这个类的数组,但是增加了一些功能,所以我定义了一个新的类B
,用一个类型为std::vector<A>
的成员变量array
来实现。
我想要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()
语句时会导致分段错误。 我宁愿没有刷新,因为应该由用户选择何时刷新流(我相信?)所以任何人都可以澄清为什么它没有崩溃?
谢谢!
你必须在那里归还一些东西。 当然是你提供的流,所以你应该:
return out;
作为运营商的最后一行。 请注意,也许是偶然的,调用out.flush()
做了一些寄存器(比如EAX)来保存流的值,从而返回(根据标准调用约定),这就是调用者所期望的。 但是你必须确保最后一次return
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.