Работает ли std::endl с cout и wcout?
Мне интересно, работает ли std::endl с std::cout и std::wcout?
Кто-нибудь ясно по этому поводу?
1 ответ
Да. По факту, std::endl
шаблон функции, который будет работать в качестве манипулятора на любой специализации std::basic_ostream
шаблон.
Более подробно: 27.7.3.6 предписывает, что std::basic_ostream
шаблон содержит перегрузку для operator<<
следующее:
basic_ostream<charT, traits> &
operator<<(basic_ostream<charT, traits> (*pf)(basic_ostream<charT, traits> &));
Влияние вызова этой перегрузки на подходящую функцию return pf(*this)
, Итак, когда вы говорите, std::cout << std::endl
это на самом деле становится std::endl(std::cout)
и возвращает ссылку на объект потока.
Все остальные ostream-манипуляторы пишутся таким же образом и аналогично для манипуляторов ввода.
Магия endl
Шаблон функции - это вызов widen('\n')
, который производит правильные данные "новой строки" для данного типа символа.