2012-11-18 52 views
3
#include <iostream> 
#include <iomanip> 
using namespace std; 

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

int main() 
{ 
    cout << currency << 7864.5; 
    return 0; 
} 

OUTPUT:左側操作數cout如何通過?

RS 7864.5 

我不明白這似乎工作即功能currency 的只是名字被用來調用的函數。 是不是應該像currency(cout),但使用它給出輸出。

RS 1054DBCC7864.5 

回答

9

函數currency()操縱器:流類具有特殊的重載輸出操作符,將特定的sigunature函數作爲參數。他們看起來像這樣(用省略掉了模板化):

​​

也就是說,currency作爲函數指針都會調用與流作爲參數傳遞。

+0

+1爲正確和準確的答案。 – Nawaz

+0

嗯,現在事情似乎很清楚......感謝這個例子 – munish

0

您的功能被視爲一個ostream操縱器。

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"