_编程语言_C++_Lambda函数与表达式
生活随笔
收集整理的這篇文章主要介紹了
_编程语言_C++_Lambda函数与表达式
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
C++11提供了對匿名函數(shù)的支持,稱為Lambda表達式函數(shù)
Lambda 表達式把函數(shù)看作對象。Lambda 表達式可以像對象一樣使用,比如可以將它們賦給變量和作為參數(shù)傳遞,還可以像函數(shù)一樣對其求值。
Lambda 表達式本質(zhì)上與函數(shù)聲明非常類似:
//[capture](parameters)->return-type{body} [](int x, int y){ return x < y ; }?
如果沒有參數(shù)可以表示為:
//[capture](parameters){body} []{ ++global_x; }?
更復(fù)雜的例子
[](int x, int y) -> int { int z = x + y; return z + x; }例中,一個臨時的參數(shù) z 被創(chuàng)建用來存儲中間結(jié)果。如同一般的函數(shù),z 的值不會保留到下一次該不具名函數(shù)再次被調(diào)用時。
如果 lambda 函數(shù)沒有傳回值(例如 void),其回返類型可被完全忽略。
?
在Lambda表達式內(nèi)可以訪問當(dāng)前作用域的變量,這是Lambda表達式的閉包(Closure)行為。 與JavaScript閉包不同,C++變量傳遞有傳值和傳引用的區(qū)別。可以通過前面的[]來指定:
[] // 沒有定義任何變量。使用未定義變量會引發(fā)錯誤。 [x, &y] // x以傳值方式傳入(默認(rèn)),y以引用方式傳入。 [&] // 任何被使用到的外部變量都隱式地以引用方式加以引用。 [=] // 任何被使用到的外部變量都隱式地以傳值方式加以引用。 [&, x] // x顯式地以傳值方式加以引用。其余變量以引用方式加以引用。 [=, &z] // z顯式地以引用方式加以引用。其余變量以傳值方式加以引用。?
?
另外有一點需要注意。對于[=]或[&]的形式,lambda 表達式可以直接使用 this 指針。但是,對于[]的形式,如果要使用 this 指針,必須顯式傳入:
[this]() { this->someFunc(); }();?
轉(zhuǎn)載于:https://www.cnblogs.com/zpsoe/p/7049550.html
總結(jié)
以上是生活随笔為你收集整理的_编程语言_C++_Lambda函数与表达式的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ark恐龙命令快捷键(ark恐龙命令小组
- 下一篇: 懂车帝app如何看到车主真实成交价以及在