【发布时间】:2012-01-08 19:26:44
【问题描述】:
自从我在写信给std::cout 时停止使用std::endl 结束行,并开始改用"\n" 以来,已经有很多年了。
但现在我开始看到更多使用'\n' 的sn-ps 代码,我开始想知道什么可能是最好的。
除了一个是字符串,另一个是字符之外,使用它还有什么好处:
std::cout << variable << '\n';
关于这个:
std::cout << variable << "\n";
后期添加:
当我问这个问题时,我似乎认为换行符'\n' 刷新了缓冲区。现在我知道它取决于。
默认情况下,std::cin 绑定到旧的 C stdin FILE* 流,std::cout 绑定到 stdout。换行符的刷新来自这种绑定。默认情况下,stdout,如果连接到终端,是行缓冲的。这意味着新行将刷新其缓冲区。因此,当使用std::cout 打印换行符时,将导致stdout 被刷新。
如果stdout 未连接到终端(例如,输出已被重定向或通过管道传输),或者如果std::cout 和stdout 之间的联系被破坏,则换行符不会刷新任何内容。
【问题讨论】:
-
有趣的问题,我也想看看这个问题的答案。 :) 另外,你为什么停止使用
std::endl? -
@Constantinius stackoverflow.com/questions/213907/c-stdendl-vs-n
-
@Constantinius 我用
using namespace std和std::endl停下来写太多了。 :) -
@Joachim:您出于错误的原因停止使用它,但至少您停止使用它。 ;)
-
您的编辑具有误导性。
std::endl已记录以刷新缓冲流。 “大多数实现似乎都刷新了”是另一种说法“到目前为止我很幸运”——但公平地说,这只有在您关心刷新时间时才重要(恕我直言,这非常罕见)。