自从我std::endl在写作时停止使用结束行std::cout并开始使用以来已经很多年了"\n".
但现在我开始看到更多的代码片段'\n',我开始想知道什么是最好的.
除了显而易见的是一个字符串,另一个字符,使用它有任何好处:
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被打破,则换行符将不刷新任何东西.
我明白,问题,如,差异endl和\n已经多次回答SO.但是他们只提到endl能够将缓冲区冲到上面stdout,而\n不是.
因此,我通过刷新缓冲区理解的是,给定的输入存储在一个缓冲区中,并且stdout仅在它遇到endl时或者一些明确的flush函数传递给它.如果是这样,我预计以下代码:
#include <iostream>
#include <unistd.h>
int main(void)
{
    std::cout << "Hello\nworld";
    sleep(2);
    std::cout << std::endl;
    return 0;
}
显示:
2秒后
Hello
World
但实际产量是:
Hello
2秒后
World
为什么会这样?
也不\n应该存储在缓冲区中,只有在endl遇到缓冲区时才会被刷新/显示在上面stdout,但是从我观察到的\n是同样的行为endl.