左手操作数cout如何在这里传递?

mun*_*ish 3 c++

#include <iostream>
#include <iomanip>
using namespace std;

ostream & currency(ostream & output)
{
    output << "RS ";
    return output;
}

int main()
{
    cout << currency  << 7864.5;
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

输出:

 RS 7864.5
Run Code Online (Sandbox Code Playgroud)

我不明白这似乎是如何工作的,即只是函数的名称currency 用于调用函数.不应该是这样,currency(cout)但使用它给出输出.

 RS 1054DBCC7864.5
Run Code Online (Sandbox Code Playgroud)

Die*_*ühl 9

该函数currency()是一个操纵器:流类具有特殊的重载输出操作符,它将具有特定sigunature的函数作为参数.他们看起来像这样(模板化被省略):

class std::ostream
    public std::ios {
public:
     // ...
     std::ostream& operator<< (std::ios_base& (*manip)(std::ios_base&));            
     std::ostream& operator<< (std::ios& (*manip)(std::ios&));         
     std::ostream& operator<< (std::ostream& (*manip)(std::ostream&));
};
Run Code Online (Sandbox Code Playgroud)

也就是说,currency作为函数指针传递,该函数指针以流作为其参数进行调用.