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

Ada*_*Lee 6 c++

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

有人清楚这个吗?

Ker*_* SB 12

是.实际上,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> &));
Run Code Online (Sandbox Code Playgroud)

在适当的函数上调用此重载的效果是return pf(*this).所以当你说std::cout << std::endl,这实际上变成std::endl(std::cout)并返回对流对象的引用.

所有其他ostream操纵器都以相同的方式编写,类似于输入操纵器.


endl函数模板的神奇之处在于调用widen('\n'),它为给定的字符类型生成正确的"换行"数据.