我想知道:如果std::endl
是常规函数,那么为什么缺少呼叫操作员(operator()
)?
我知道它被设计为与插入(<<
)和提取(>>
)运算符一起使用。我试图这样称呼它:
std::endl.();
,但这当然不起作用。
std::endl
只是您可以调用的普通函数(或更确切地说是功能模板)。您只需要以正确的参数来调用它:
std::endl(std::cout); // OK, equivalent to "std::cout << std::endl;"
这是因为ostream
以相当于以下的方式超载用于函数指针的移位操作员:
ostream & operator<<(ostream & os, ostream & (*f)(ostream &))
{
return f(os);
}
(实际上它将是basic_ostream
处理任何类型的性格特征和分配器的模板。)