我有一个自定义类,为此我定义了一个自定义强制转换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()
语句时,它将导致分段错误。我宁愿不要在其中冲洗,因为应该由用户来选择何时冲洗流(我相信吗?),所以任何人都可以澄清一下为什么没有冲洗它会崩溃吗?谢谢!
最佳答案
您必须在那里退回一些东西。当然,已经为您提供了流,因此您应该:
return out;
作为运算符的最后一行。注意,也许偶然地,调用
out.flush()
创建了一个寄存器(例如EAX)来保存流的值,从而被返回(按照标准调用约定),而这正是调用者所期望的。但是您必须确定添加最后一个return
。关于c++ - olush&运算符<<不带flush()的段错误,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7423880/