C 11新特性 lambda表示式

2021-08-28 08:35:16 字數 1737 閱讀 1639

為何要寫一篇博文呢?其實,系統學了c++一定會學到lambda表示式。不巧不巧,在秋招的浪潮中,我又被問到了關於lambda表示式,回過頭想一想,其實lambda表示式在c++中應用挺廣泛的。匿名函式,短小精悍,應該就是它的feature。

好記性不如爛筆頭,書上有路勤為徑。、

可呼叫物件:對於任何乙個物件或表示式,如果可以對其使用呼叫運算子,則稱它為可呼叫物件。目前,c++支援四種可呼叫物件函式、函式指標、過載函式呼叫運算子()的類,lambda表示式

用途:在c++ algorithm中傳遞任何類別的可呼叫物件。

[capture list]( parameter list) mutable或exception- > return type

(1)lambda表示式中必須使用尾置返回來指定返回型別

(2)引數列表和返回型別可忽略

忽略引數列表,則傳參為空;

返回型別忽略以後,lambda根據函式體中的**推斷出返回型別,不包含return語句,則返回void

(3)()的用法

[=]按照副本引用(值訪問)this,還有當前塊語句的區域性變數,不可以賦值,但可讀取(面試的時候,沒有答出唯讀的特點,只記住了值傳遞*_*)。但是,在後面新增了mutable,則可以修改此副本,但是真實值卻沒有被修改,即作用域只是在函式體內{}。

[&]按照引用的方式(引用訪問)操作區域性變數,this(類成員函式為lambda),可以賦值,可以讀取

[this],可以

副本引用a,可以用 [=] [a]

直接引用a ,可以用 [&] [&a]

返回值->double[double為返回值型別]

()lambda表示式傳遞引數,實參和形參必須匹配,與普通函式不同,lambda不能有預設引數(但,我寫了沒報錯^_^)。

tips:用過qt的小夥伴,應該經常在connect函式中,繫結事件響應的槽函式,有了lambda表示式以後,直接用這個就很方便了。

下面給出一些能表現上面特性的demo。

#include

using namespace std;

class person;f

(); cout << s << endl;}}

;int gsnr =9;

int m =

100;

intmain

(int argc,

char

*argv)

;f()

; cout << m << endl;

cout <<

"global m:"

<<

::m<< endl;

person p;

p.print()

; cout <<

"age:"

<< p.age ;

return0;

}

c 11 新特性 lambda表示式

iso c 11 標準的一大亮點是引入lambda表示式。基本語法如下 capture list parameter list return type 其中除了 其中捕獲列表可以為空 和 復合語句 相當於具名函式定義的函式體 其它都是可選的。它的型別是唯一的具有成員operator 的非聯合的類型別...

C 11新特性 lambda表示式

在c 11以後,形如這樣的語法。capture parameters mutable return type 稱為乙個lambda表示式,表達乙個匿名函式。從程式設計的角度上看,lambda是一種函式式程式設計。分析語法 1.capture,可以通過值傳遞或者引用傳遞的方式給匿名函式提供訪問父作用域...

C 11 新特性之Lambda表示式

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