«\ n» или '\ n' или от std :: endl до std :: cout? [duplicate]

На этот вопрос уже есть ответ:

Прошло много лет с тех пор, как я перестал использовать std :: endl для завершения строк при записи в std :: cout и начал использовать "\ n " вместо этого.

Но теперь я начинаю видеть больше фрагментов кода, использующих вместо этого '\ n' , и я начал задаваться вопросом, что могло бы быть лучше.

Помимо очевидного, что один является строкой, а другой - символом, есть ли преимущества в использовании этого:

std::cout << variable << '\n';

По сравнению с этим:

std::cout << variable << "\n";

Позднее добавление:

Когда я задал этот вопрос, мне показалось, что я подумал эта новая строка '\ n' очистила буфер. Теперь я знаю, что это зависит .

По умолчанию std :: cin привязан к старому потоку C stdin FILE * , а std :: cout привязан к стандартный вывод . Смывание новой строки происходит из-за этой привязки. По умолчанию stdout , если он подключен к терминалу, буферизуется по строке. Это означает, что новая строка очистит свои буферы. Поэтому при печати новой строки с использованием std :: cout это приведет к сбросу stdout .

Если stdout не подключен к терминалу (например, вывод был перенаправлен или передан по конвейеру), или если связь между std :: cout и stdout не работает, новые строки ничего не сбрасывают.

90
задан Some programmer dude 20 March 2018 в 10:09
поделиться