代码之家  ›  专栏  ›  技术社区  ›  João Paulo

使用sync_和stdio时的打印顺序

  •  0
  • João Paulo  · 技术社区  · 5 年前

    看这个例子:

    #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) 会提高性能吗(例如,在上面的例子中)?

    1 回复  |  直到 5 年前
        1
  •  2
  •   Mansoor    5 年前

    stdout流的默认行为是行缓冲,因此输出完全合理。 printf 不会立即冲洗 fflush(stdout) .

    对于您的第二个问题,当不需要同步时,您会期望性能得到改善。不过,最好是进行概要分析和检查,显然对于这个小片段来说,这无关紧要。