c++ - ostream 会刷新其他流吗?

标签 c++ visual-c++

我很好奇为什么我通过不同的ostream输出,并且不刷新它们,但是当程序退出时,它们不会弄乱顺序,一个ostream会刷新其他流吗?C++标准库如何让它们进行通信?

#include <iostream>

int main()
{
    std::clog << "flush test1 by clog\n";
    std::cout << "flush test1 by cout\n";
    std::cout << "flush test2 by cout\n";
    std::clog << "flush test2 by clog\n";
    return 0;
}

/* The output is
 * flush test1 by clog
 * flush test1 by cout
 * flush test2 by cout
 * flush test2 by clog
 */

最佳答案

clog 流通常与 cerr 流相同,这取决于您的库,行缓冲或不缓冲,这意味着至少在一行之后break (\n) 它被写入您的终端。另一方面,cout 可能是完全缓冲的(仅在缓冲区已满或刷新时才写入)、行缓冲或不缓冲。来自cplusplus.com的更具体信息:(“如果已知stdout不引用交互式设备,则流被完全缓冲。否则,流是否是行的取决于库默认情况下缓冲或不缓冲。”)。假设您的终端是交互式的,cout 缓冲区至少会在每一行之后写入您的终端。

关于c++ - ostream 会刷新其他流吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62617947/

相关文章:

c++ - Direct2D:将 ID2D1Image 转换为 ID2D1Bitmap

c - 多维 __m256i 数据类型对齐问题

c++ - 无论模板参数如何,哪些 std::map 方法是相同的(并且可能共享符号)?

.net - 将 VS MBCS 源代码表达式转换为 Unicode

android - OpenCV 支持哪些 Android 操作系统?

c++ - 使用 OpenGL 绘制三角形

c++ - vgasave 中的 D3D 设备

windows - C++ CreateFile 和 fopen 函数抢先读取整个远程文件

c++ - 具有光体积的延迟渲染器产生奇怪的 strip

c++ - 不能在 .h 文件 C++ 中使用 glGenBuffers