#include <iostream>
#include <iomanip>
using namespace std;
ostream & currency(ostream & output)
{
output << "RS ";
return output;
}
int main()
{
cout << currency << 7864.5;
return 0;
}
输出:
RS 7864.5
我不明白这似乎是如何工作的,只是函数的名称currency
用于调用函数。
这不应该像currency(cout)
,但使用它会产生输出。
RS 1054DBCC7864.5
答案 0 :(得分: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&));
};
也就是说,currency
作为函数指针传递,并以流作为参数调用。
答案 1 :(得分:2)
这有效(问题中的代码):
std::cout << currency << 7864.5;
这样做:
currency(std::cout) << 7864.5;
你明显地尝试和抱怨但没有表现出来的是:
std::cout << currency(std::cout) << 7864.5;
这与:
相同ostream& retval = currency(std::cout); // prints "RS " as you expect
std::cout << retval; // oops, this is cout << cout, which is meaningless
std::cout << 7864.5; // prints "7864.5"
答案 2 :(得分:0)
您的功能被视为ostream操纵器。