Есть два способа записать перевод строки - std::endl и \n. В чем разница? Когда что использовать?
- 31,143
-
Возможный дубликат вопроса: Зачем нужен std::endl? – Arhadthedev Jul 19 '18 at 08:48
2 Answers
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";
Ссылки
- 31,143
-
1
-
Ещё от меня, чуточку по теме, но когда использовать cout, cerr, clog: http://htrd.su/wiki/zhurnal/2016/03/15/std_cout_std_cerr_i_std_clog – Monah Tuk Mar 17 '16 at 04:15
-
Я бы еще добавил что
std::endlудобно вызывать когда у нас есть буфер который необходимо вывести, т.к. у буфера может не быть\n. – Dec 02 '17 at 15:40
Надо помнить, что в с++ файлы сами не закрываются при выходе из проги. Может и закрываются, но только в памяти, а на диске файл будет не виден. Правильно сказал предыдущий человек: смотря какую цель преследуете. Возможно не нужно так часто флашить, особенно в цикле.
Пишите "@": чтоб на почту пришло. Я случайно увидел ваш коммент. По сути: нет потоки само не закрывает (по крайней мере на диске). Приходится в деструкторе объекта указывать close(), чтоб файл был на диске. В паскале проще: там можно не указывать закрытие, при выходе из проги само закроет.
- 20,179
- 206
- 1
- 7
-
2Прошу пояснить, желательно с примерами кода. Использование потоков для взаимодействия с файлами автоматически закрывает их (файлы) при разрушении объекта. – awesoon May 03 '15 at 08:26