std::flush
紧接在 std::endl
用于我正在查看的遗留代码之后。当我第一次看到这个时,我的想法是查看 std::endl
和 std::flush
的描述是多余的:
http://en.cppreference.com/w/cpp/io/manip/endl
http://en.cppreference.com/w/cpp/io/manip/flush
这是我在遗留源代码中看到的示例:
std::cout << "Generic Notification" << std::endl << std::flush;
但是,由于多年来许多高级软件开发人员都看过这段代码,我想知道我是否遗漏了一些细节。在 std::endl
之后添加 std::flush
有什么意义吗?
最佳答案
没有任何目的。
如果我不得不推测为什么您的遗留代码包含这些行,有几种可能性,从(我认为的)最可能的场景开始:
- 有人错误地添加了对
std::flush
的显式调用,高级开发人员认为这不是需要修复的问题 - 代码源于C++标准被广泛采用之前的时间,而那个时候本地编译器对
std::endl
的实现并没有触发刷新,这意味着你的高级开发人员我们(正确地)理解这是必要的 - 旧版本的 C++ 标准可能不需要
std::endl
来触发刷新 - 您的高级开发人员对
std::endl
的行为有误。 - 您的执行环境是一个奇怪的庞然大物,实际上需要刷新两次输出才能获得预期的结果。
关于c++ - std::endl << std::flush 有目的吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50707011/