Страницы

Поиск по вопросам

суббота, 30 ноября 2019 г.

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

#cpp #cpp_faq


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


Ответы

Ответ 1



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"; Ссылки Описание endl на cppreference.com

Ответ 2



Надо помнить, что в с++ файлы сами не закрываются при выходе из проги. Может и закрываются, но только в памяти, а на диске файл будет не виден. Правильно сказал предыдущий человек: смотря какую цель преследуете. Возможно не нужно так часто флашить, особенно в цикле. Пишите "@": чтоб на почту пришло. Я случайно увидел ваш коммент. По сути: нет потоки само не закрывает (по крайней мере на диске). Приходится в деструкторе объекта указывать close(), чтоб файл был на диске. В паскале проще: там можно не указывать закрытие, при выходе из проги само закроет.

Комментариев нет:

Отправить комментарий