Прошло много лет с тех пор, как я перестал использовать std::endl
для завершения строк при записи в std::cout
и вместо этого начал использовать "\n"
.
Но теперь я начинаю видеть больше фрагментов кода, используя '\n'
, и я начал задаваться вопросом, что может быть лучше.
Помимо очевидного, что одна из них является строкой, а другая - символом, есть ли преимущество в использовании этого:
std::cout << variable << '\n';
Через это:
std::cout << variable << "\n";
Позднее добавление:
Когда я задал этот вопрос, мне показалось, что новая строка '\n'
сбросила буфер. Теперь я знаю, что это зависит.
По умолчанию std::cin
привязан к старому stdin
FILE*
, а std::cout
привязан к stdout
. Из-за этой привязки происходит промывка новой строки. По умолчанию stdout
, если подключен к терминалу, буферизируется по строке. Это означает, что новая строка очистит буферы. Поэтому при печати новой строки с использованием std::cout
это приведет к stdout
.
Если stdout
не подключен к терминалу (например, выход был перенаправлен или передан по каналам), или если связь между std::cout
и stdout
нарушена, то символы новой строки ничего не будут скрывать.