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