关于刷新缓冲区的例子
下面几种情况导致缓冲区刷新:
1. 程序正常结束。作为 main 返回工作的一部分,将清空所有输出缓冲区。
2. 在一些不确定的时候,缓冲区可能已经满了,在这种情况下,缓冲区将会
在写下一个值之前刷新。
3. 用操纵符(第 1.2.2 节)显式地刷新缓冲区,例如行结束符 endl。
4. 在每次输出操作执行完后,用 unitbuf 操作符设置流的内部状态,从而
清空缓冲区。
5. 可将输出流与输入流关联(tie)起来。在这种情况下,在读输入流时将
刷新其关联的输出缓冲区。
同时书上还说:"警告:如果程序崩溃了,则不会刷新缓冲区"
问题是我为了验证这个警告写的代码达不到要求,应该怎么写?
cout << "hi";
throw runtime_error("崩溃了");
以上代码执行时,程序崩溃了,但"hi"还是输出了!
[解决办法]
这个和Shell、控制台的缓冲策略有关,有些C实现在抛出错误时,并不算崩溃,而是算异常退出,而且可能打印错误。段错误之类的致命错误,这个在Linux下更有可能成功。
[解决办法]
试试我这个版本,其实LZ的方法我也试过,但是是能达到证明的效果的,可能平台相关。
# include <iostream># include <stdexcept>using namespace std;int main(){ cout << "hi";// throw runtime_error("hi"); int * i = NULL; *i = 0; return 0;}