比較函式指標 函式符和lambda函式

2021-07-15 03:59:12 字數 1696 閱讀 1248

1.函式指標

函式指標即函式的位址,函式的位址是儲存其機器語言**記憶體的開始位址。函式的位址可作為其他函式的引數。

獲取函式的位址很簡單

:只要使用函式名

(後面不跟引數

)即可。也就是說,如果

think()

是乙個函式,則

think

就是該函式的位址。要將函式作為引數進行傳遞,必須傳遞函式名。一定要區分傳遞的是函式的位址還是函式的返回值。

process(think); //函式think()的位址傳給process()

process(think()); //函式think()的返回值傳給process()

2.函式符

函式符是可以以函式方式與()結合使用的任意物件。這包括函式名、指向函式的指標和過載了()運算子的類物件(即定義了函式operator()()的類)。函式符是乙個類物件,並非只能像函式名那樣使用它,這要歸功於類方法operator()()。函式符的優點之一是,可使用同乙個函式符來完成這兩項基數任務。

例如:

class f_mod;

bool operator()(int x)

private:

int dv;

};

f_mod obj(3); //f_mod.dv=3
而這個物件可使用方法operator()來返回乙個bool值

bool is_div_by_3 = obj(7); //等價於obj.operator()(7)

3.lambda函式

名稱lambda來自lambda calculus(λ演算),一種定義和應用函式的數學系統。這個系統讓您能夠使用匿名函式——即無需給函式命名。在c++11中,對於接受函式指標或函式符的函式,可以使用匿名函式定義(lambda)作為其引數。

例如:

bool f3(int i)
函式f3()對應的lambda表示式為:

(int x)
差別有兩個:1)使用代替了函式名(這就是匿名的由來)

2)沒有宣告返回型別。返回型別相當於使用decltyp根據返回值推斷得到的,這裡為bool。

函式指標、函式符和lambda函式code:

#include"iostream"

#include"vector"

#include"algorithm"

#include"cmath"

#include"ctime"

using namespace std;

const long size1 = 39l;

const long size2 = 100 * size1;

const long size3 = 100 * size2;

bool f3(int i)

bool f13(int i)

int main()

{ vectornumbers(size1);

srand(time(0));

generate(numbers.begin(), numbers.end(),rand);

//使用函式指標

cout << "sample size"<

內建函式filter 和匿名函式lambda解析

一.內建函式filter filter 函式是 python 內建的乙個高階函式,filter 函式接收乙個函式 f 和乙個list,這個函式 f 的作用是對每個元素進行判斷,返回由符合條件迭代器 python3以下版本返回是列表 語法 filter function or none,iterabl...

python學習之map函式和lambda函式

map 是 python 內建的高階函式,它接收乙個函式 f 和乙個 list,並通過把函式 f 依次作用在 list 的每個元素上,得到乙個新的 list 並返回。map function,iterable,在map中,不會對itetable進行修改 def fun x return 2 x t ...

指標函式和函式指標

指標函式和函式指標 一 指標函式 當乙個函式宣告其返回值為乙個指標時,實際上就是返回乙個位址給呼叫函式,以用於需要指標或位址的表示式中。格式 型別說明符 函式名 引數 當然了,由於返回的是乙個位址,所以型別說明符一般都是int。例如 int getdate int aaa int,int 函式返回的...