【问题标题】:Typo on wikipedia input/output examples维基百科输入/输出示例上的错字
【发布时间】:2015-03-26 06:42:30
【问题描述】:

我正在阅读以下来自维基百科的example

#include <iostream>

int main()
{
    std::cout << "Hello, world!\n";
    return 0;
}

文章内容如下:

这个程序会输出“Hello, world!”后跟换行符和 标准输出流缓冲区刷新。

我不认为这是正确的,因为 '\n' 不需要 std::flush

我应该继续编辑文章,将'\n' 更改为std::endl 吗?

【问题讨论】:

  • 显然,在“is X true”类型的问题上,否决票不再用于说“坏问题”,而是说“不”
  • @sp2danny 我不知道...感谢您的澄清
  • 我认为@sp2danny 有点讽刺。否决票不应用于表示答案是否定的。 (但我们不知道投反对票的原因。)

标签: c++ cout flush


【解决方案1】:

不,程序正常终止时会刷新标准输出。 (如果一个简单的“Hello, world”程序异常终止,你可能无能为力。)不过,你可能想澄清这一点(刷新发生在程序,而不是 std::cout &lt;&lt; ... 调用)。

return 0; 是不必要的(但无害)。

【讨论】:

  • 我相信你需要改写program terminates,我相信只有在没有异常程序终止发生(中止......)时才会发生刷新。
【解决方案2】:

默认情况下,cout 流与 C 库的 stdout 流同步(即它们将共享相同的缓冲区)。并且 C 标准规定 stdout 在写入交互式设备时将是行缓冲或非缓冲的。

这意味着默认情况下,如果输出是控制台等交互式设备,cout 将在打印 \n 时刷新。如果你打电话给std::cout.sync_with_stdio(false),它可能不会再刷新了。

除此之外,正如另一个答案所说,输出将在程序终止时被刷新。

【讨论】:

  • 大多数 c++ 库重用 C 的标准输出,但这不是必需的
  • @malat 是标准要求的。
  • 那不就是std::ios_base::sync_with_stdio(false) 的全部目的吗?
  • @malat 我不确定您所说的“那个”指的是什么。 sync_with_stdio(false) 将导致 C++ 流独立于 C 库的流运行,但默认情况下它们是同步的。
  • 这是必需的,除非您专门调用std::cout.sync_with_stdio(false) 来禁用它。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-01-02
  • 2013-11-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多