标准输出奇怪的行为

Standard output strange behavior

本文关键字:标准输出      更新时间:2023-10-16

我在使用Eclipse cdt时遇到问题,并且我正面临一个奇怪的行为:

cout << "Hello world" << endl;
aFunction();
// The output here is Hello world
// END

当我取下endl时,输出没有

cout << "Hello world";
aFunction();
// No output
// END

当我稍后放置endl时,它运行良好:

cout << "Hello world";
aFunction();
cout << endl;
// output is Hello world
// END

现在,我无法提供函数代码,因为它将花费我一千行的时间。

然而,我用一个不做void toto(){}的函数尝试了这个,并没有出现这个奇怪的事情。

cout << "Hello world";
toto();
// Gives me Hello world
// END

我想知道的是,是什么导致了这种情况??

编辑:使用foo的测试是单独测试的(没有其他指令),在其他测试中,我初始化了一个结构,并将其作为参数提供给aFunction。这个函数使用了一些元编程,我需要展示很多代码来让你理解它

当写入流时,它们通常被缓冲,这意味着输出存储在内部缓冲区(内存块)中。当缓冲区已满时,或者当流被明确告知时,缓冲区就会被刷新,输出实际上会写入文件或设备。

std::endl I/O操纵器不仅添加了一个换行符,还刷新流中的缓冲区,从而实际写入缓冲输出。

std::endl添加一个新行刷新给它的流。

您可以使用std::flush刷新流。

尝试调用

std::ostream::flush()

以刷新流缓冲区。这项工作是由endl完成的,当您将其取下时,消息会在缓冲区中等待就绪,以便在缓冲区已满或出现新行时进行刷新。

所以如果你想的话,你可以自己冲洗。