9

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

有人对此很清楚吗?

4

1 回答 1

14

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

于 2012-12-01T13:19:39.883 回答