C++编程语言之Lambda 函数与表达式
C++11 提供了對匿名函數(shù)的支持,稱為 Lambda 函數(shù)(也叫 Lambda 表達(dá)式)。
Lambda 表達(dá)式把函數(shù)看作對象。Lambda 表達(dá)式可以像對象一樣使用,比如可以將它們賦給變量和作為參數(shù)傳遞,還可以像函數(shù)一樣對其求值。
Lambda 表達(dá)式本質(zhì)上與函數(shù)聲明非常類似。Lambda 表達(dá)式具體形式如下:
[capture](parameters)->return-type{body}例如:
[](int x, int y){ return x < y ; }如果沒有返回值可以表示為:
[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表達(dá)式內(nèi)可以訪問當(dāng)前作用域的變量,這是Lambda表達(dá)式的閉包(Closure)行為。 與JavaScript閉包不同,C++變量傳遞有傳值和傳引用的區(qū)別。可以通過前面的[]來指定:
[] // 沒有定義任何變量。使用未定義變量會引發(fā)錯誤。 [x, &y] // x以傳值方式傳入(默認(rèn)),y以引用方式傳入。 [&] // 任何被使用到的外部變量都隱式地以引用方式加以引用。 [=] // 任何被使用到的外部變量都隱式地以傳值方式加以引用。 [&, x] // x顯式地以傳值方式加以引用。其余變量以引用方式加以引用。 [=, &z] // z顯式地以引用方式加以引用。其余變量以傳值方式加以引用。另外有一點需要注意。對于[=]或[&]的形式,lambda 表達(dá)式可以直接使用 this 指針。但是,對于[]的形式,如果要使用 this 指針,必須顯式傳入:
[this]() { this->someFunc(); }();總結(jié)
以上是生活随笔為你收集整理的C++编程语言之Lambda 函数与表达式的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: C++编程语言之赋值运算符
- 下一篇: Qt Creator如何恢复默认布局