C ++: "std :: endl" против "\ n" - PullRequest
       86

C ++: "std :: endl" против "\ n"

497 голосов
/ 18 октября 2008

Многие книги на C ++ содержат пример кода, подобного этому ...

std::cout << "Test line" << std::endl;

... так что я всегда так делал. Но вместо этого я видел много кода от таких разработчиков:

std::cout << "Test line\n";

Есть ли техническая причина, чтобы отдавать предпочтение одному над другим, или это просто вопрос стиля кодирования?

Ответы [ 13 ]

0 голосов
/ 28 октября 2018

Если вы намереваетесь запустить вашу программу на чем-то другом, кроме вашего ноутбука, никогда не используйте оператор endl Особенно, если вы пишете много коротких строк или, как я часто видел, отдельные символы в файле. Известно, что использование endl убивает сетевые файловые системы, такие как NFS.

0 голосов
/ 27 марта 2018

С ссылкой Это Манипулятор ввода-вывода только для вывода .

std::endl Вставляет символ новой строки в выходную последовательность os и сбрасывает его, как если бы вызывал os.put(os.widen('\n')), а затем os.flush().

Когда использовать:

Этот манипулятор может использоваться для немедленного вывода строки ,

например,

при отображении вывода из продолжительного процесса, регистрации активности нескольких потоков или активности программы, которая может неожиданно завершить работу.

Также

Явная очистка std :: cout также необходима перед вызовом std :: system, если порожденный процесс выполняет какой-либо экранный ввод-вывод. В большинстве других обычных интерактивных сценариев ввода / вывода std :: endl является избыточным при использовании с std :: cout, потому что любой ввод из std :: cin, вывод в std :: cerr или завершение программы вызывает вызов std :: cout .промывать(). Использование std :: endl вместо '\ n', поощряемое некоторыми источниками, может значительно снизить производительность вывода.

0 голосов
/ 22 декабря 2015

Если вы не заметили, endl похоже на нажатие клавиши ВВОД, а "\n" похоже на нажатие клавиши ВВОД + ПРОБЕЛ.

...