什麼是lamda表示式?

2022-08-29 12:27:11 字數 1072 閱讀 9260

我們首先來看一下這一片**:

1

class

solution );

7return

retval;8}

9 };

看一下第六行的**,for_each是c++用來處理container的乙個很好用的東西(雖然只是經常用來print一下),第三個引數是個函式,對於前面的引數進行處理的函式。具體可以參考這裡。

第三個引數就是鼎鼎大名的lamda表示式了。樓主也是剛知道這是c++11的新特性,對於用著十年前教材的大學來說是肯定不會教的啦==

簡單來說,lamda表示式就是乙個匿名函式。

基本語法結構是(){};

其中是變數捕獲列表,用來宣告需要捕獲的外部變數;

()是引數列表部分;

{}是函式體部分。

看個例子:

(int a, int b);

c++ lamda表示式的引數列表中引數需要宣告型別;函式體不能省略{}符號和return關鍵字;即使單條語句時也不能省略。

顯式宣告需要捕獲的外部變數,舉個栗子:

1

void

hostingfunction()

2;

5 }

**中宣告了需要捕獲外部變數c,則函式體中即可引用變數c,否則不能引用。不同於c# lamda表示式,上述例子中對變數c的改變並不能影響f的行為,因為捕獲的c是以值型別捕獲的,也即是乙份拷貝。如果對變數c採取按引用的方式捕獲,則變數c的改變會影響f的行為。如下:

1

void

hostingfunction()

2;

5 }

這個時候,我們就可以看懂文章最開始的**了~

1

int retval = 0

;2 for_each(a, a+n, [&retval](int val));

表示retval對於每個val進行異或操作。最後的結果儲存在retval中。

這個題目是:

具體為什麼要異或呢,大家想一想吧~~~

LAMDA表示式學習

1.普通繫結 public void button1 click object sender,eventargs e this.button1.click button1 click 2.匿名委託 this.button1.click delegate object sender,eventargs...

lamda表示式學習

lamda表示式 格式 形參列表 作用 簡化匿名方法的書寫,可用在任何可使用匿名方法和強型別 的地方 例子 using system using system.collections.generic using system.linq using system.text namespace lamd...

python的lamda表示式

學習python時看到了這個函式 對裡面的lamda表示式產生了疑問。經過一番查詢,對lamda表示式理解如下 lamda看似是表示式,其實是乙個函式,冒號前是傳入的引數,冒號後是表示式,return將返回它的值。可以用來代替乙個簡單的函式,減少 篇幅 例1 def sum x,y return x...