c++ - std::endl << std::flush 有目的吗?

标签 c++ flush endl

std::flush 紧接在 std::endl 用于我正在查看的遗留代码之后。当我第一次看到这个时,我的想法是查看 std::endlstd::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/

相关文章:

php - 为什么我需要 `str_pad(' ',4096)` 才能使 PHP 刷新工作?

linux - 有没有办法检查最近是否刷新了处理器缓存?

c - 通过探测从缓冲区写入文件,C 程序

c++ - 添加 endl 修复代码

C++ cout 和 endl 无法在终端上正确打印

c++ - Android NDK C++ 代码的内存调试工具

c++ - 线程函数中的通用引用

c++ - 换行符是否也刷新缓冲区?

c++ - 如何反转轨迹栏的范围? (commctrl.dll)

c++ - 如何将变量添加到其当前值,以及随后的用户输入?