1

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

我知道它被设计为与插入(<<)和提取(>>)运算符一起使用。我试着这样称呼它:

std::endl.();

但这当然没有用。

4

1 回答 1

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

于 2014-03-08T11:28:29.580 回答