Когда писать std::endl а когда '\n'?

Рейтинг: 12Ответов: 1Опубликовано: 02.05.2015

Есть два способа записать перевод строки - std::endl и \n. В чем разница? Когда что использовать?

Ответы

▲ 17Принят

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";

Ссылки