c++ - 使用 sync_with_stdio 时打印顺序

标签 c++ printf cout

看这个例子:

#include <iostream>
#include <stdio.h>

int main()
{
    std::ios::sync_with_stdio(false);
    std::cout << "a";
    printf("b");
    std::cout << "c";
}

在 gcc 9.2 上,我得到 acb 作为输出。我期待 bac,因为如果我理解正确的话,std::cout 将使用它的缓冲区。为什么按这个顺序打印?

附加问题:设置 std::ios::sync_with_stdio(false) 会提高性能(例如,在上面的示例中)?

最佳答案

stdout 流的默认 典型行为是行缓冲,因此输出是完全合理的。 printf 不会立即刷新,为此使用 fflush(stdout)

关于您的第二个问题,当不需要同步时,人们会期望性能会提高。然而,分析和检查总是更好,显然对于这个小片段,它不会有太大影响。


编辑:根据 this post 更正答案.

关于c++ - 使用 sync_with_stdio 时打印顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57897532/

相关文章:

c++ - 接口(interface)和多态的区别

c++ - 是否可以将线程执行转移到另一个线程?

c++ - 在不执行程序的情况下在 C++11 中检索 auto 的类型

c++ - Windows 8 拼写检查提供程序

variables - AWK打印带有变量的字符串

embedded - STM32 IAR 没有 ITM 跟踪输出,除非代码中包含 printf

cout <<自动的C++格式

c++ - 禁用 OpenCV VideoWriter 输出

c - 末尾显示随机字符的数组

c++ - 如何将 cout 和 cin 放在同一行?