c 可呼叫物件 解惑

2021-08-15 01:34:28 字數 1423 閱讀 1226

如有錯誤,還望指正。

在閱讀書籍或者論壇的時候常常會遇到可呼叫物件的概念,很多人都沒有深入的理解這個概念,甚至有人會覺得函式就是可呼叫物件就是

函式,其實是不對的,在這裡給大家做一下詳細的解釋。

可呼叫物件是c++長久以來存在的乙個概念,大體可以分為4種,分別是:

1.函式指標 2.仿函式 3.可以被隱式轉換為函式指標的類物件

4.類的成員函式指標。

1.函式指標

#includeusing namespace std;

int fun(int a);

int main()

ftype就是乙個型別,fun1就是函式指標。

2.仿函式

先簡單講一下仿函式這個概念,如果乙個類中將運算子()過載,那這個類的類物件可以作為可呼叫物件。

#includeusing namespace std;

class example

; ~example(){};

void operator()();

};int main()

顯然, 類物件e1可以像函式一樣進行呼叫,此時e1也是乙個可呼叫物件。注意,普通的函式並不是,但過載()運算子的類物件是。

輸出就是example。

3.可以被隱式轉換為函式指標的類物件

類物件和其他資料型別之間可以進行隱式轉化,這裡用到的是由類物件到其他型別,而此處的其它型別就是函式指標型別。使用的

是operator關鍵字。另外,由其他資料型別到類物件的隱式型別是有轉換建構函式或者說是多引數的建構函式並且除某乙個之外其他

引數都有預設值。

#includeusing namespace std;

void fun()

class example

; ~example(){};

operator ftype();

};int main()

顯然,e1可以像函式一樣被呼叫,此時類物件e1就是乙個可呼叫物件。

4.類的成員指標

類的成員指標和普通指標的宣告是很相似的,下面給出其結構:

返回值型別  (類名::*指標名)()=&類名::方法

#includeusing namespace std;

class example

; ~example(){};

inline void fun();

};int main()

輸出為hello。注意,類成員函式指標不能用巨集定義或者using的方法規定乙個型別,而只能直接宣告指標(如果可以的話還望指正,我還沒有見過也不曉得書寫的方法)。指標在呼叫的時候也必須借殼類物件才能呼叫。以上就是幾種可呼叫物件。

C 可呼叫物件

可呼叫物件 使用呼叫運算子來呼叫乙個可呼叫物件。呼叫運算子 為一對括號 裡面放置實參列表 可能為空 即匿名函式,不命名的可呼叫物件。每個lambda有它唯一的 未命名的,可以用auto宣告型別 類型別。完整結構 capture list parameter list return type 其中 r...

C 可呼叫物件 function bind

void func int a intmain int argc,const char ar 仿函式定義 行為類似於函式的東西,c 中通過在類中過載 運算子實現。又稱函式物件 能行駛函式功能的類。class test intmain int argc,const char ar class test...

可呼叫物件

我們可以向演算法傳遞任何類別的可呼叫物件 函式,函式指標,過載了函式呼叫運算子的類,lambda 表示式,bind 函式。函式物件 1 如果類過載了函式呼叫運算子,則我們可以像使用函式一樣使用該類的物件。因為這樣的類同時也能儲存狀態,所以與普通函式相比他們更加靈活。例 struct absint i...