C++语言之Lambda函数与表达式
生活随笔
收集整理的這篇文章主要介紹了
C++语言之Lambda函数与表达式
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
C++11 提供了對匿名函數的支持,稱為 Lambda 函數(也叫 Lambda 表達式)。
Lambda 表達式把函數看作對象。Lambda 表達式可以像對象一樣使用,比如可以將它們賦給變量和作為參數傳遞,還可以像函數一樣對其求值。
Lambda 表達式本質上與函數聲明非常類似。Lambda 表達式具體形式如下:
[capture](parameters)->return-type{body}例如:
[](int x, int y){ return x < y ; }如果沒有返回值可以表示為:
[capture](parameters){body}例如:
[]{ ++global_x; }在一個更為復雜的例子中,返回類型可以被明確的指定如下:
[](int x, int y) -> int { int z = x + y; return z + x; }本例中,一個臨時的參數 z 被創建用來存儲中間結果。如同一般的函數,z 的值不會保留到下一次該不具名函數再次被調用時。
如果 lambda 函數沒有傳回值(例如 void),其返回類型可被完全忽略。
在Lambda表達式內可以訪問當前作用域的變量,這是Lambda表達式的閉包(Closure)行為。 與JavaScript閉包不同,C++變量傳遞有傳值和傳引用的區別。可以通過前面的[]來指定:
[] // 沒有定義任何變量。使用未定義變量會引發錯誤。 [x, &y] // x以傳值方式傳入(默認),y以引用方式傳入。 [&] // 任何被使用到的外部變量都隱式地以引用方式加以引用。 [=] // 任何被使用到的外部變量都隱式地以傳值方式加以引用。 [&, x] // x顯式地以傳值方式加以引用。其余變量以引用方式加以引用。 [=, &z] // z顯式地以引用方式加以引用。其余變量以傳值方式加以引用。另外有一點需要注意。對于[=]或[&]的形式,lambda 表達式可以直接使用 this 指針。但是,對于[]的形式,如果要使用 this 指針,必須顯式傳入:
[this]() { this->someFunc(); }();總結
以上是生活随笔為你收集整理的C++语言之Lambda函数与表达式的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: C++ 中的左值(Lvalues)和右值
- 下一篇: C++ 中有大量的函数用来操作以‘\0‘