【C++】解釋C++裏面奇怪的[](){}、[xxx]( int a, int b ) { return a + b; }這類寫法到底是什麼鬼【是著名的lambda啊啊啊啊】

緣由:有幾個新手私信我,看到C++裏面出現了 [](){ 代碼塊 }這類寫法不知所云。

解答:總而言之就是C++11的新特性,Lambda函數。

其實這個lambda函數並不是C++首創的。

其實還有一個異常捕捉throw()我就不寫上去了。

解釋一下:

1,捕捉列表

捕捉列表總是作爲lambda的開始,即出現於lambda的開始處。它是lambda的引出符(即開始標誌)。編譯器可以根據該“標誌”來作出判斷出該函數是否爲lambda函數。同時“捕捉列表”能夠捕捉上下文中的變量以作爲lambda函數使用。

[var ] 表示以值傳遞方式捕捉變量var
[ =  ] 表示值傳遞捕捉所有父作用域變量
[&var] 表示以引用傳遞方式捕捉變量var
[ &  ] 表示引用傳遞捕捉所有父作用域變量
[this] 表示值傳遞方式捕捉當前的this指針
還有一些組合:
[=,&a] 表示以引用傳遞方式捕捉a,值傳遞方式捕捉其他變量
注意:
捕捉列表不允許變量重複傳遞,
如:[=,a]、[&,&this],會引起編譯時期的錯誤

2,參數列表

略,跟普通函數的參數列表一樣,無參數時,可以連同"()"省略掉

3,mutable修飾符

在默認的情況下,lambda函數返回值用const修飾,而當我們在參數列表後面註明了“mutable”關鍵字之後,則可以取消其常量性質。若在lambda中使用了mutable修飾符,則“參數列表”是不可省略掉的(即使是參數爲空)。

4,返回值類型

略,你懂的

5,函數體

略,你也懂的

 

 

 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章