C 11 新特性之 lambda

2021-09-11 04:46:23 字數 1291 閱讀 7605

這是c++11新特性介紹的第三部分,涉及到c++11這次更新中較為重要的lambda表示式。

不想看toy code的讀者可以直接拉到文章最後看這部分的總結。

熟悉python的程式設計師應該對lambda不陌生。簡單來說,lambda就是乙個匿名的可呼叫**塊。在c++11新標準中,lambda具有如下格式:

[capture list] (parameter list) -> return type

可以看到,他有四個組成部分:

(1)capture list: 捕獲列表

(2)parameter list: 引數列表

(3)return type: 返回型別

(4)function body: 執行**

其中,引數列表和返回型別可以忽略。

下面,具體看幾個簡單的例子:

auto f1 = ;

auto f2 = () ;

cout捕獲值:

int test_data = ;

int border = 8;

auto f3 = [border](const int &i);

transform(begin(test_data), end(test_data), begin(test_data), f9);

border = 0;

for_each(begin(test_data), end(test_data), f6);

cout但是,像下面這種形式,由於編譯器在推斷返回型別時發現了不一致,所以必須顯式的指定返回型別:

auto f10 = (const int i) -> double

;transform(begin(test_data), end(test_data), begin(test_data), f10);

for_each(begin(test_data), end(test_data), f6);

cout<(1)lambda表示式形式: [capture list] (parameter list) -> return type ,其中parameter list和return type可以省略。

(2)捕獲列表可以捕獲值[val],也可以捕獲引用[&ref]。

(3)捕獲列表還可以隱式捕獲區域性變數,同樣有捕獲值[=]和捕獲引用[&]兩種方式,初次之外還可以混合捕獲[&, val]或者[=, &ref]。

(4)當lambda需要修改捕獲的值時,需要加上mutable關鍵字。

(5)當lambda無法自動推斷出返回值型別時,需要通過尾置返回型別的方式顯示指定。

c 11新特性 lambda函式

lambda歷史悠久,在數理邏輯和電腦科學領域,lambda被用來表示一種匿名函式這種匿名函式代表了一種 演算 lambda calculus 但是在c 領域直到c 11才引入lambda表示式,本文先打算從lambda函式入手 後續會繼續從lambda與仿函式 lambda基礎應用 lambda的...

C 11 新特性之Lambda表示式

一 lambda表示式 c 11中的 lambda 表示式用於定義並建立匿名的函式物件,以簡化程式設計工作。lambda 的語法形式如下 函式物件引數 操作符過載函式引數 mutable 或exception 宣告 返回值型別 可以看到,lambda主要分為五個部分 函式物件引數 操作符過載函式引數...

C 11新特性 Lambda函式(匿名函式)

c 11終於知道要在語言中加入匿名函式了。匿名函式在很多時候可以為編碼提供便利,這在下文會提到。很多語言中的匿名函式,如c 都是用lambda表示式實現的。lambda表示式又稱為lambda函式。我在下文中稱之為lambda函式。為了明白lambda函式的用處,請務必先搞明白c 中的自動型別推斷 ...