函式物件 和 函式指標 的區別

2021-06-13 12:28:00 字數 1239 閱讀 5339

參考一

函式物件(也稱「算符」)是過載了「()」操作符的普通類物件。因此從語法上講,函式物件與普通的函式行為類似。

用函式物件代替函式指標有幾個優點:

1. 首先,因為物件可以在內部修改而不用改動外部介面,因此設計更靈活,更富有彈性。函式物件也具備有儲存先前呼叫結果的資料成員。在使用普通函式時需要將先前呼叫的結果儲存在全域性或者本地靜態變數中,但是全域性或者本地靜態變數有某些我們不願意看到的缺陷。

2. 其次,在函式物件中編譯器能實現內聯呼叫(編譯器能內聯過載的操作符**,所以就避免了與函式呼叫相關的執行時問題),從而更進一步增強了效能。這在函式指標中幾乎是不可能實現的。

3. 模板函式物件: 增加函式物件的通用性。

參考二

c++函式物件實質上是乙個實現了operator()--括號操作符--的類。

函式物件可以攜帶附加資料,而指標就不行了。

另外,c++函式物件還有乙個函式指標無法匹敵的用法:可以用來封裝類成員函式指標!因為函式物件可以攜帶附加資料,而成員函式指標缺少乙個類實體(類例項)指標來呼叫,因此,可以把類實體指標給函式物件儲存起來,就可以用於呼叫對應類實體成員函式了。

template

class memfun 

void operator()(const char* name)

private: 

void(o::*pfunc)(const char*); 

o* pobj; 

}; 

class a 

}; 

a a; 

memfuncall(&a::doit, &a); // 儲存 a::doit指標以便呼叫 

call("kitty"); // 輸出 hello kitty!

參考三

函式物件(function object),又名仿函式(functor),是過載了operator()的乙個類,其實在stl演算法中有大量運用,c++標準預定義的如 less <>,greater <>,bind2nd <>等

為什麼引入仿函式?

原因:1.仿函式有具體型別,可用在模板引數,而函式不行。

2.同類仿函式可有不同值,可代表不同狀態,比函式靈活(須定義多個)。

3.仿函式可能比普通函式快。

不要以為函式物件的頻繁呼叫會使程式效能大大折扣,大量事實和實驗證明,正確使用函式物件的程式要比其他程式效能快很多!

指標函式和函式指標的區別

1,這兩個概念都是簡稱,指標函式是指帶指標的函式,即本質是乙個函式。我們知道函式都又有返回型別 如果不 返回值,則為無值型 只不過指標函式返回型別是某一型別的指標。其定義格式如下所示 返回型別 識別符號 返回名稱 形式參數列 返回型別可以是任何基本型別和復合型別。返回指標的函式的用途十分廣泛。事實上...

函式指標和指標函式的區別

1.指標函式 int f inta,intb 此函式有返回值,返回值為int 即返回值是指標型別的。首先它是乙個函式,只不過這個函式的返回值是乙個位址值。函式返回值必須用同型別的指標變數來接受,也就是說指標函式一定有函式返回值,而且在主調函式中,函式返回值必須賦給同型別的指標變數。讓指標標誌 與in...

函式指標和指標函式的區別

問題 include using namespace std int max int x,int y float find float p,int x int main int p int int float q find score 1,1 int a p max a p 1,2 cout a c...