为什么C 流操作器没有呼叫操作员



我想知道:如果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处理任何类型的性格特征和分配器的模板。)

最新更新