Strange behaviour of std::cout in Linux

前端 未结 2 1990
小鲜肉
小鲜肉 2021-01-23 09:11

I am trying to print results in 2 nested for cycles using std::cout. However, the results are not printed to the console immediately, but with delay (a

2条回答
  •  情歌与酒
    2021-01-23 09:38

    If you don't flush your output, your output is not guaranteed to be visible outside your program. The fact that it is not printing in your terminal is just a consequence of the default behavior in linux to do line buffering when the output is a tty. If you run your program on linux with its output piped to another thing, like

     ./your_program | cat
    

    Then the default buffer will be MUCH larger, most likely it will be at least 4096 bytes. So nothing will get displayed until the big buffer gets full. but really, the behaviour is OS specific unless you flush std::cout yourself.

    To flush std::cout, use :

    std::cout << std::flush;
    

    also, using

    std::cout << std::endl;
    

    is a shortcut to

    std::cout << '\n' << std::flush;
    

提交回复
热议问题