我有一个自定义类,为此我定义了一个自定义强制转换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/

10-10 15:58