Разница между endl и '\ n'

Возможный дубликат:
C ++: «std :: endl» vs «\ n ”

У меня есть простая программа, которую я тестировал, и я понимаю, что endl наносит ущерб моей программе. При использовании endl моя программа работала за 100+ мс, а при работе с '\n' время упало до ~ 50 мс. Кто-нибудь может сказать, почему такая разница?

P.S. Я читал другие сообщения, в которых так или иначе объяснялось, что каждый из них делает, но действительно ли std::flush занимает так много времени?
Или может быть другое возможное объяснение?


person Mihai Bujanca    schedule 24.11.2012    source источник
comment
endl также очищает буфер.   -  person Duck    schedule 25.11.2012


Ответы (2)


endl очень дорогая flush() операция

27.7.3.8 Стандартные манипуляторы basic_ostream [ostream.manip]

namespace std {
template <class charT, class traits>
basic_ostream<charT,traits>& endl(basic_ostream<charT,traits>& os);
}
1 Effects: Calls os.put(os.widen(’\n’)), then os.flush().
2 Returns: os.
person billz    schedule 24.11.2012

std::endl записывает новую строку, и очищает буфер. Как вы обнаружили, промывка может быть довольно дорогостоящей операцией.

person NPE    schedule 24.11.2012
comment
Мне довольно странно, что эта штука может удвоить время выполнения. Спасибо - person Mihai Bujanca; 25.11.2012
comment
@BujancaMihai: Если у вас есть сомнения, сравните время: (1) endl; (2) \n; (3) \n, за которым следует flush. - person NPE; 25.11.2012
comment
Без сомнения, я уже пробовал и разница очевидна. Я знал, что flushing происходит, но не то, что это такая дорогостоящая операция. Большое спасибо - person Mihai Bujanca; 25.11.2012
comment
@BujancaMihai: возможно, стоимость промывки зависит от того, сколько вещей вам нужно промыть, поэтому трудно предсказать, насколько дорогостоящей будет операция. - person effeffe; 25.11.2012