gpt4 book ai didi

c++ - 为什么在c++中使用ios::sync_with_stdio(false)后printf先于cout执行?

转载 作者:太空宇宙 更新时间:2023-11-04 14:59:31 26 4
gpt4 key购买 nike

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


int main () {
std::ios::sync_with_stdio(false);
std::cout << "hi from c++\n";
printf("hi from c\n");
return 0;
}

删除 std::endl 并在 cout 语句中放入\n 后,输出更改为以下内容:

hi from c
hi from c++

最佳答案

这是一个缓冲问题。

默认情况下,当标准输出连接到终端时,stdoutline-buffered,这意味着缓冲区被刷新并且输出实际写入换行符的终端。 p>

当 C stdio 与 C++ 标准流断开连接时,std::cout完全缓冲的,这意味着输出实际上是在显式刷新时写入的(使用例如 std::flushstd::endl 操纵器)或缓冲区是否已满。

C的stdout和C++的std::cout使用的两个buffer是不同的,没有联系。

程序退出时也会刷新缓冲区。


在您的程序中发生的情况是,由于字符串中的尾随换行符,带有 printf 的输出被立即刷新。但 std::cout 的输出仅在程序退出时刷新。

关于c++ - 为什么在c++中使用ios::sync_with_stdio(false)后printf先于cout执行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57188247/

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