9 / 9 / 1
Регистрация: 01.07.2012
Сообщений: 138
|
|
1 | |
Символ '\n' и манипулятор endl22.12.2012, 16:10. Показов 8062. Ответов 21
Метки нет (Все метки)
Встретил в одной книге вот такое выражение (дословно):
Если операционная система не использует буферизацию вывода, то между символом новой строки '\n' и манипулятором endl нет никакой разницы. Хотелось бы узнать, а нынешняя Windows использует буферизацию или нет?
2
|
22.12.2012, 16:10 | |
Ответы с готовыми решениями:
21
Манипулятор std::endl Какого типа std::endl ? Как сделать так, чтобы функция могла принимать endl в качестве аргумента? endl endl |
387 / 151 / 16
Регистрация: 12.05.2011
Сообщений: 450
|
|
22.12.2012, 16:20 | 2 |
использует, конечно
0
|
3 / 3 / 2
Регистрация: 18.10.2012
Сообщений: 101
|
|
22.12.2012, 16:22 | 3 |
Сейчас уже пофиг что использовать. Что в лоб что по полбу ... а насчет буферизации спроси гугл больше пользы будет
0
|
387 / 151 / 16
Регистрация: 12.05.2011
Сообщений: 450
|
|
22.12.2012, 16:23 | 4 |
если тебя конкретно интересует буферизация при использовании плюсовых объектов cout, clog, cerr, то в cout и clog, насколько я помню, буферизация используется, а в cerr -- нет.
0
|
Форумчанин
8216 / 5046 / 1437
Регистрация: 29.11.2010
Сообщений: 13,453
|
|
22.12.2012, 16:25 | 5 |
Да, использует.
Дело в том, что endl - перегруженная функция, вызывающая ф-цию flush(), которая сбрасывает буфер и выводит все, что в нем накопилось, на устройство вывода, и дополняющая в конце последовательности символом '\n'.
1
|
9 / 9 / 1
Регистрация: 01.07.2012
Сообщений: 138
|
|
22.12.2012, 16:27 [ТС] | 6 |
Обяъсните проще, есть ли какая-либо разница между первым и вторым, и если есть, то как это ну почувствовать что ли?
0
|
Форумчанин
8216 / 5046 / 1437
Регистрация: 29.11.2010
Сообщений: 13,453
|
|
22.12.2012, 16:32 | 7 |
ramybozy, например, если программа занимается обработкой фотографии, и нужно вывести информацию о некоторых её параметрах, без сбрасывания ostream потока, информацию выведет лишь при завершении обработки или ближайшем вызове flush() метода, а с ним во время обращения к std::cout.
1
|
Неэпический
|
|||||||||||
22.12.2012, 16:32 | 8 | ||||||||||
0
|
9 / 9 / 1
Регистрация: 01.07.2012
Сообщений: 138
|
|
22.12.2012, 16:46 [ТС] | 10 |
А с пояснениями, не затруднит вас.
У меня во втором случае необработанное исключение выскакивает. Добавлено через 3 минуты А у вас, diagon, вообще ничего не понятно. Может быть не стоит так над новичком издеваться, а просто взяли бы и объяснили бы попроще.
0
|
Higher
|
|
22.12.2012, 16:48 | 11 |
Сначала выводится текст, затем вызывается функция, которая приводит к переполнению стека и аварийному завершению программы. При этом, если выводить через '\n', то ничего вообще не выведется, так как буфер просто не будет сброшен. А вот std::endl буфер сбрасывает.
0
|
22.12.2012, 16:53 | 12 |
Он имел в виду то, что использование std::endl немедленно освобождает буфер и выводит напечатанный текст на экран. Когда мы делаем печать (какую-нибудь трассировку программы), а затем программа фатально убивается, то в случае с std::endl печать гарантированно (если я правильно понял) отобразится на экране. А с использованием '\n' печать залипнет во внутреннем буфере программы, а в момент аварийного завершения программы уже некому будет её выводить на экран
В том примере в качестве аварийного завершения моделировалось переполнение стека, после чего программа немедленно прибивается операционной системой
2
|
22.12.2012, 16:54 | 13 |
Нет, не пофиг. Иногда даже делают дополнительную буферизацию (т.е. свою реализацию вывода, внутри которой используются стандартные средства вывода) для увеличения скорости вывода.
0
|
Croessmah
|
22.12.2012, 17:21
#18
|
0
|
Higher
|
||||||
22.12.2012, 17:26 | 20 | |||||
Там своя атмосфера. Явно не в деструкторах, ведь буфер будет сброшен даже при abort().
Более того.
1
|
22.12.2012, 17:26 | |
22.12.2012, 17:26 | |
Помогаю со студенческими работами здесь
20
Можно ли заменить \n на endl ? Что делает endl `endl' undeclared (first use in this function) endl необъявленный идентификатор Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |