這是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 中的自動型別推斷 ...