C++ lambda表达式
lanmbda表達式形式如下:
[capture list] (parameter list) ->return type { function body }
捕獲列表
capture list 為捕獲列表,是函數體內局部變量的列表(通常為空)。
捕獲有值捕獲和引用捕獲兩種形式:
auto f1 = [v1]{ return v1; }; //值捕獲
auto f2 = [&v2] { return v2;}; //引用捕獲
隱式捕獲
在捕獲列表中填寫=(值捕獲)或&(引用捕獲)來讓編譯器推斷捕獲列表。
混用顯示捕獲和隱式捕獲時,列表中第一個元素必須是&或=,&和=不能同時存在。
并且在使用&后,顯示捕獲不能有引用捕獲;使用=亦然。
可變lambda
如果希望能改變捕獲的值,應在參數列表首加上關鍵字mutable:
auto f = [v1] () mutable { return ++v1; }; //v1會被改變
傳遞參數
lambda表達式不能含有默認參數。
返回值
默認情況下,如果lamba體內包含除return外語句,編譯器假定返回void,需要自定返回類型,需要使用尾置返回類型:
auto f = [] (int i) -> int? { if(i>0) return i; else return -i; };
轉載于:https://www.cnblogs.com/wshr007/p/10450897.html
總結
以上是生活随笔為你收集整理的C++ lambda表达式的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 手机能上网,电脑联不上网
- 下一篇: 关于Map迭代循环,key和value的