日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > c/c++ >内容正文

c/c++

_编程语言_C++_Lambda函数与表达式

發(fā)布時(shí)間:2023/12/2 c/c++ 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 _编程语言_C++_Lambda函数与表达式 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

  C++11提供了對(duì)匿名函數(shù)的支持,稱(chēng)為L(zhǎng)ambda表達(dá)式函數(shù)

Lambda 表達(dá)式把函數(shù)看作對(duì)象。Lambda 表達(dá)式可以像對(duì)象一樣使用,比如可以將它們賦給變量和作為參數(shù)傳遞,還可以像函數(shù)一樣對(duì)其求值。

Lambda 表達(dá)式本質(zhì)上與函數(shù)聲明非常類(lèi)似:

//[capture](parameters)->return-type{body} [](int x, int y){ return x < y ; }

?

如果沒(méi)有參數(shù)可以表示為:

//[capture](parameters){body} []{ ++global_x; }

?

更復(fù)雜的例子

[](int x, int y) -> int { int z = x + y; return z + x; }

例中,一個(gè)臨時(shí)的參數(shù) z 被創(chuàng)建用來(lái)存儲(chǔ)中間結(jié)果。如同一般的函數(shù),z 的值不會(huì)保留到下一次該不具名函數(shù)再次被調(diào)用時(shí)。

如果 lambda 函數(shù)沒(méi)有傳回值(例如 void),其回返類(lèi)型可被完全忽略。

?

在Lambda表達(dá)式內(nèi)可以訪問(wèn)當(dāng)前作用域的變量,這是Lambda表達(dá)式的閉包(Closure)行為。 與JavaScript閉包不同,C++變量傳遞有傳值和傳引用的區(qū)別??梢酝ㄟ^(guò)前面的[]來(lái)指定:

[] // 沒(méi)有定義任何變量。使用未定義變量會(huì)引發(fā)錯(cuò)誤。 [x, &y] // x以傳值方式傳入(默認(rèn)),y以引用方式傳入。 [&] // 任何被使用到的外部變量都隱式地以引用方式加以引用。 [=] // 任何被使用到的外部變量都隱式地以傳值方式加以引用。 [&, x] // x顯式地以傳值方式加以引用。其余變量以引用方式加以引用。 [=, &z] // z顯式地以引用方式加以引用。其余變量以傳值方式加以引用。

?

?

另外有一點(diǎn)需要注意。對(duì)于[=]或[&]的形式,lambda 表達(dá)式可以直接使用 this 指針。但是,對(duì)于[]的形式,如果要使用 this 指針,必須顯式傳入:

[this]() { this->someFunc(); }();

?

轉(zhuǎn)載于:https://www.cnblogs.com/zpsoe/p/7049550.html

總結(jié)

以上是生活随笔為你收集整理的_编程语言_C++_Lambda函数与表达式的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。