gpt4 book ai didi

c++ - 告诉 `endl` 不要刷新

转载 作者:塔克拉玛干 更新时间:2023-11-03 08:06:32 27 4
gpt4 key购买 nike

我的程序将大量短行打印到 cout

作为一个稍微做作的例子,我的台词看起来有点像这样:

cout<<"The variable's value is: "<<variable<<endl;

我希望程序运行,我相信 endl 正在杀死我,因为它在 cout 上启动缓冲区刷新每次使用它。

现在,网上有些人说我可以这样做:

cout<<"The variable's value is: "<<variable<<"\n";

但这似乎不是一个好的解决方案,因为 endl 抽象了可能指定结束行的特定系统特定方式,而 \n 则没有。这似乎也是一个糟糕的解决方案,因为如果我将来需要缓冲,我将不得不修改整个代码库。

因此,我问,有没有办法禁用 endl 的缓冲区刷新方面?

编辑

进一步挖掘似乎表明endl\n 都尊重操作系统可能选择结束其行的各种方式。 It also seems输出流检测它是否处于潜在的交互情况并相应地缓冲和刷新。因此:这个问题可以通过手动告诉输出流执行主动缓冲来解决......如果我能弄清楚该怎么做的话。

最佳答案

endl abstracts the particular system-specific ways an end line might be specified, where as \n does not".

std::endl 被定义为输出 '\n' 后跟刷新。系统特定换行符的正确抽象只是'\n'

为了防止刷新,我们只是不使用 std::endl。此外,如果标准输出连接到或可能连接到交互式设备,则标准输出可能是行缓冲的,在这种情况下,换行符将刷新流。如果这是一个问题,请使用连接到命名文件的 ofstream。我认为在类 Unix 系统上,只有当标准输出是终端时才会发生行缓冲。

关于c++ - 告诉 `endl` 不要刷新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21129162/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com