緣由:有幾個新手私信我,看到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,函數體
略,你也懂的