我想知道:如果例如std::endl
是常规函数,那为什么它缺少调用运算符(operator()
)?
我知道它设计用于插入(<<
)和提取(>>
)运算符。我试着这样称呼它:
std::endl.();
但当然没有用。
答案 0 :(得分:7)
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
处理任何类型的角色特征和分配器的模板。)