c++中的lambda特性
來源:
http://www.jb51.net/article/56147.htm
cocos2dx3.0測試:
1.有參數a,b
printf("lambda=%lf",?[](float?a,int?b)->float?{?return?a+b;?}?(-0.5,10));
結果:-0.5+10 =?
?
參數a:-0.5??
參數b:10?
參數:->float??代表結果為float類型
參數【】:也是代表傳參的
2.測試2: [=] 里面有加號,表示值傳遞方式捕捉所有父作用域的變量(包括this);
??int d = 20;
??printf("lambda=%lf", [=](float a, int b)->float { return a + b ?+ d; } (-0.5, 10));
結果:-0.5+10+20 =??
?總結:
1.[var]表示值傳遞方式捕捉變量var;
2.[=]表示值傳遞方式捕捉所有父作用域的變量(包括this);
3.[&var]表示引用傳遞捕捉變量var;
4.[&]表示引用傳遞方式捕捉所有父作用域的變量(包括this);
5.[this]表示值傳遞方式捕捉當前的this指針。
?
上面提到了一個父作用域,也就是包含Lambda函數的語句塊,說通俗點就是包含Lambda的“{}”代碼塊。上面的捕捉列表還可以進行組合,例如:
?
1.[=,&a,&b]表示以引用傳遞的方式捕捉變量a和b,以值傳遞方式捕捉其它所有變量;
2.[&,a,this]表示以值傳遞的方式捕捉變量a和this,引用傳遞方式捕捉其它所有變量。
?
不過值得注意的是,捕捉列表不允許變量重復傳遞。下面一些例子就是典型的重復,會導致編譯時期的錯誤。例如:
3.[=,a]這里已經以值傳遞方式捕捉了所有變量,但是重復捕捉a了,會報錯的;
4.[&,&this]這里&已經以引用傳遞方式捕捉了所有變量,再捕捉this也是一種重復。
轉載于:https://www.cnblogs.com/liangtf/p/6245385.html
總結
以上是生活随笔為你收集整理的c++中的lambda特性的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 另一种遍历Map的方式: Map.Ent
- 下一篇: springmvc基础学习3---注解简