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