国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > C++ > 正文

C++ 中的Lambda表達式寫法

2020-01-26 14:15:51
字體:
來源:轉載
供稿:網友

小喵的嘮叨話:

寒假之后,小喵在家里無所事事,最近用C++寫代碼的時候,用到了std::sort這個函數,每次用這個函數,小喵似乎都得查一下lambda表達式的寫法。正好最近很閑,不如總結一下。

在Bing上搜索 C++ lambda ,第一條記錄就是MSDN上的C++ lambda的介紹。本文也是基于這篇文章來寫的。

那么接下來,我們分幾個部分來介紹。

一、什么是Lambda表達式

MSDN上對lambda表達式的解釋:

在 C++ 11 中,lambda 表達式(通常稱為 “lambda”)是一種在被調用的位置或作為參數傳遞給函數的位置定義匿名函數對象的簡便方法。 Lambda 通常用于封裝傳遞給算法或異步方法的少量代碼行。 [1]

看了這個解釋,相信大家已經理解lambda表達式是什么。簡而言之,lambda表達式就是一種定義函數的簡單的方法。

舉一個簡單的例子:求一個數的階乘。

這是一般的函數的寫法:

// 這里要求n>=0,同時n的取值不能太大,會溢出// 為了方便,這里并沒有處理上面說到的問題int factorial(int n) { int fact = 1; for (int i = 1; i <= n; ++ i) fact *= i; return fact;}

Lambda表達式的寫法:

autofactorial = [](int n) { int fact = 1; for (int i = 1; i <= n; ++ i) fact *= i; return fact;};

乍一看,這兩種定義方式十分的相似。但其實這是兩種完全不同的方式,前一種是函數定義式,而后一種是一個表達式。factorial是變量名,等于號后面的是值,也就是一個lambda表達式,本質上是一個匿名的函數。最終factorial就是一個函數。

很多時候,我們只是直接書寫lambda表達式,而不需要給他一個名字。比如排序的時候,sort可以接受一個自定義的比較函數,這時候直接書寫lambda表達式即可。

二、Lambda表達式的作用

由于lambda本身其實也就是一種函數的定義方式。因此它的主要作用還是和一般函數一樣。但是lambda表達式相對于一般函數,又有一些功能之外的作用。參考了知乎上的一些回答 [2] ,小喵也進行了總結。

1、可以用表達式來定義函數,這樣使得函數的定義和調用在一起,語意和邏輯上更為緊湊。同時,對于只是用一次的短小的函數,直接調用匿名的lambda表達式是最好的選擇,這樣就不需要給每個函數起名字了。 /* 起名字一直是一個很令人頭疼的問題 */

2、閉包(Closure)。這個小喵的寫javascript的時候時常會用到。閉包本質上就是能夠訪問上下文環境中變量的代碼塊。

這里我們簡單的舉個例子,還是之前的求階乘的問題,現在我們有些提高需求。

現在需要完成下面的三種階乘的運算:

n! = n * (n

主站蜘蛛池模板: 汶川县| 昭苏县| 上林县| 大竹县| 南雄市| 观塘区| 蓬安县| 金坛市| 博爱县| 巴林左旗| 神木县| 正定县| 盐亭县| 浦江县| 喀什市| 绥滨县| 城市| 金平| 安化县| 中西区| 安仁县| 澎湖县| 泰和县| 固镇县| 江孜县| 大名县| 承德市| 广平县| 通榆县| 南投县| 赤峰市| 饶阳县| 雅江县| 都匀市| 黔东| 蒙阴县| 延津县| 房产| 潮州市| 灵宝市| 石屏县|