std :: endl是否同时适用于cout和wcout?

时间:2012-12-01 13:16:07

标签: c++

我想知道std :: endl是否适用于std :: cout和std :: wcout?

有人对此很清楚吗?

1 个答案:

答案 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'),它为给定的字符类型生成正确的“换行符”数据。