我想知道 std::endl 是否同时适用于 std::cout 和 std::wcout?
有人对此很清楚吗?
是的。事实上,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')
,它为给定的字符类型生成正确的“换行符”数据。