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;
Run Code Online (Sandbox Code Playgroud)
但是,由于许多高级软件开发人员多年来都看过这个代码,我想知道是否有一些我遗漏的细节.有没有任何目的有一个std::flush后std::endl?
Xir*_*ema 11
它没有任何目的.
如果我不得不推测为什么遗留代码包含这些行,那么有一些可能性,从(我认为是)最可能的场景开始:
std::flush错误地添加了明确的调用,而高级开发人员并不认为这是一个需要修复的问题std::endl没有触发刷新,这意味着您的高级开发人员(正确地)理解它是必要的std::endl触发刷新std::endl.我将添加到其他有效的答案,很多时候,没有一个良好的目的,要么 std::flush也std::endl。
基本上,std::endl=开始一个新行+刷新流。但是,很多人倾向于用std::endl“听起来不错”来结束他们的台词——结束台词。但是我们实际上很少需要刷新输出流。有时我们会这样做(例如,当我们期待用户对字符串的回复时,或者以最小延迟监控我们的输出很重要时) - 但这是例外,而不是规则。
所以,可能需要一点时间来适应,但我们真的应该默认为简单的:
std::cout << bunch_of_stuff << '\n';
Run Code Online (Sandbox Code Playgroud)
就是这样!