c++ - ostream& operator<< 没有 flush() 的段错误

标签 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() 时最后的语句会导致段错误。我宁愿那里没有冲洗,因为应该由用户选择何时冲洗流(我相信?)所以任何人都可以澄清为什么没有它会崩溃吗?

谢谢!

最佳答案

你必须在那里归还一些东西。当然,已经为您提供了流,所以您应该:

return out;

作为运算符的最后一行。请注意,调用 out.flush() 可能是偶然的,使一些寄存器(比如 EAX)保存流的值,因此被返回(根据标准调用约定),这就是来电者正在期待。 但是您必须确定添加最后一个返回

关于c++ - ostream& operator<< 没有 flush() 的段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7423880/

相关文章:

r - 什么!运算符在R中表示平均值,尤其是在!! sym (“x”上下文中)

javascript - 伪代码中的 "!"是什么意思?我知道 "!"代表阶乘,但我无法翻译它

c++ - 如何将非空终止字符串输出到 iostream,但保持格式化

c++ - cin不接受C++中带有空格的输入吗?

grails - 这个运算符叫什么,它用于 <=>

c++ - Borland C++ 编译器中的 Iostream

c++ - 为什么在调用构造函数后会崩溃?我正在尝试将shared_ptr推回 vector

c++ - 将键移出 std::map<> &&

c++ - 堆栈大小估计

c++ - 内联汇编 : operand type mismatch for 'out'