为什么C ++流操作符没有调用操作符?

时间:2014-03-08 11:24:00

标签: c++ c++11 manipulators

我想知道:如果例如std::endl是常规函数,那为什么它缺少调用运算符(operator())?

我知道它设计用于插入(<<)和提取(>>)运算符。我试着这样称呼它:

std::endl.();

但当然没有用。

1 个答案:

答案 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处理任何类型的角色特征和分配器的模板。)