C++ 为什么sleep()会阻止std::ostream

C++ 为什么sleep()会阻止std::ostream,c++,concurrency,sleep,iostream,C++,Concurrency,Sleep,Iostream,鉴于以下情况: const char opn[8] = { 0x16, 'O', 'P', 'N', 0x17, 0xa8, 0xa9, '\0' }; std::cout << opn; sleep(5); const char opn[8]={0x16',O',P',N',0x17,0xa8,0xa9',\0'}; 默认情况下,std::coutstd::cout是缓冲的,因此消息不会立即打印,只有在std::cout的缓冲区被刷新时,即程序终止时才会打印 使用 std::co

鉴于以下情况:

const char opn[8] = { 0x16, 'O', 'P', 'N', 0x17, 0xa8, 0xa9, '\0' };
std::cout << opn;
sleep(5);
const char opn[8]={0x16',O',P',N',0x17,0xa8,0xa9',\0'};

默认情况下,std::cout
std::cout
是缓冲的,因此消息不会立即打印,只有在
std::cout
的缓冲区被刷新时,即程序终止时才会打印

使用


std::cout
std::cout
在默认情况下是缓冲的,因此消息不会立即打印,只有在
std::cout
的缓冲区被刷新时,即程序终止时才会打印

使用


std::如果你在睡觉前写
cout.flush()
,我能预测结果会改变吗首先,你的\0在哪里?第二,行缓冲可能是一个因素,但首先要去掉UB。我预测,如果您在睡觉前编写
cout.flush()
,结果会发生变化。首先,您的\0在哪里?第二,行缓冲可能是一个因素,但首先要去掉UB。
std::cout@RemyLebeau好吧,但这对OP有什么帮助?如果他想要一条尾随的新线,我想他会这么说。只是说一个关于法拉盛的额外事实。不是每个人都理解
std::endl
执行刷新,许多人认为它只是
'\n'
的别名,可以互换使用。
std::cout@RemyLebeau好吧,但这对操作有什么帮助?如果他想要一条尾随的新线,我想他会这么说。只是说一个关于法拉盛的额外事实。并非所有人都理解
std::endl
执行刷新,许多人认为它只是
'\n'
的别名,可以互换使用。
std::cout << opn << std::flush;