#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)
该函数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作为函数指针传递,该函数指针以流作为其参数进行调用.