Когда писать std::endl а когда '\n'?
Есть два способа записать перевод строки - std::endl
и \n
. В чем разница? Когда что использовать?
Источник: Stack Overflow на русском
Есть два способа записать перевод строки - std::endl
и \n
. В чем разница? Когда что использовать?
std::endl
реализован как os.put(os.widen(’\n’)); os.flush();
.
Соответственно всё отличие в том, что endl
вызывает flush()
, а \n
- нет.
Вызов flush()
очищает буфер потока, и если выполнять его слишком часто, он может ощутимо замедлить выполнение программы.
Также надо помнить что std::endl
не нужен там где стандартная библиотека сама вызывает cout.flush()
:
std::cin
std::cerr
Некоторые реализации буферизуют вывод в stdout построчно, и запись \n
сама будет вызывать flush
.
Записать буфер можно явно, манипулятором std::flush
, например
std::cout << "Calculating XYZ ... " << std::flush; wait_XYZ(); std::cout << "OK\n";