国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

【C++】lambda表達式語法詳細解讀(代碼演示,要點解析)

這篇具有很好參考價值的文章主要介紹了【C++】lambda表達式語法詳細解讀(代碼演示,要點解析)。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

前言

大家好吖,歡迎來到 YY 滴C++系列 ,熱烈歡迎! 本章主要內(nèi)容面向接觸過C++的老鐵
主要內(nèi)容含:
【C++】lambda表達式語法詳細解讀(代碼演示,要點解析),YYの小小知識點,c++,java,windows

歡迎訂閱 YY滴C++專欄!更多干貨持續(xù)更新!以下是傳送門!

  • YY的《C++》專欄
  • YY的《C++11》專欄
  • YY的《Linux》專欄
  • YY的《數(shù)據(jù)結(jié)構(gòu)》專欄
  • YY的《C語言基礎(chǔ)》專欄
  • YY的《初學者易錯點》專欄
  • YY的《小小知識點》專欄

一.lambda表達式語法

1)lambda表達式總覽

lambda表達式書寫格式:[capture-list] (parameters) mutable -> return-type { statement }文章來源地址http://www.zghlxwxcb.cn/news/detail-769940.html

  1. lambda表達式各部分說明
    [capture-list] : 捕捉列表,該列表總是出現(xiàn)在lambda函數(shù)的開始位置,編譯器根據(jù)[]來判斷接下來的代碼是否為lambda函數(shù),捕捉列表能夠捕捉上下文中的變量供lambda函數(shù)使用。
  • (parameters):參數(shù)列表。與普通函數(shù)的參數(shù)列表一致,如果不需要參數(shù)傳遞,則可以連同()一起省略
  • mutable:默認情況下,lambda函數(shù)總是一個const函數(shù),mutable可以取消其常量性。使用該修飾符時,參數(shù)列表不可省略(即使參數(shù)為空)。
  • ->returntype:返回值類型。用追蹤返回類型形式聲明函數(shù)的返回值類型,沒有返回值時此部分可省略。返回值類型明確情況下,也可省略,由編譯器對返回類型進行推導。
  • {statement}:函數(shù)體。在該函數(shù)體內(nèi),除了可以使用其參數(shù)外,還可以使用所有捕獲到的變量。
  • 在lambda函數(shù)定義中,參數(shù)列表和返回值類型都是可選部分,而捕捉列表和函數(shù)體可以為空。因此C++11中最簡單的lambda函數(shù)為:[]{}; 該lambda函數(shù)不能做任何事情。

2) lambda的返回值類型一般可以省略

  • ->returntype:返回值類型。
  • 用追蹤返回類型形式聲明函數(shù)的返回值類型,沒有返回值時此部分可省略。返回值類型明確情況下,也可省略,由編譯器對返回類型進行推導。
int main()
{
	int a = 0, b = 2;
	double rate = 2.555;
	auto add1 = [](int x, int y)->int {return x + y; };
	auto add2 = [](int x, int y) {return x + y; };//返回值類型明確情況下,也可省略,由編譯器對返回類型進行推導。
}

3) 捕捉列表能夠捕捉上下文中的變量供lambda函數(shù)使用

  • 下面代碼需要捕捉rate變量給后面函數(shù)體用
auto add3 = [rate](int x, int y) {return (x + y)* rate; };

4) 捕捉列表【特殊使用方式】一覽

  • [var]:表示值傳遞方式捕捉變量var
  • [=]:表示值傳遞方式捕獲所有父作用域中的變量(包括this)
  • [&var]:表示引用傳遞捕捉變量var
  • [&]:表示引用傳遞捕捉所有父作用域中的變量(包括this)
  • [this]:表示值傳遞方式捕捉當前的this指針
  • 以下為 [&] 演示+ [&,a] 演示
int a = 0;
int b = 1;
int c = 2;
int d = 3;
const int e = 1;
cout << &e << endl;

// 引用的方式捕捉所有對象,除了a
// a用傳值的方式捕捉

//捕捉所有對象auto func = [&]{函數(shù)體};
auto func = [&, a] {
	//a++;fail
	b++;
	c++;
	d++;
	//e++;
	cout << &e << endl;

5) mutable在【傳值傳參】時的用法

  • 默認情況下,lambda函數(shù)總是一個const函數(shù),mutable可以取消其常量性。使用該修飾符時,參數(shù)列表不可省略(即使參數(shù)為空)
//這里程序是會報錯的,可以這樣理解:因為其參數(shù)默認是帶const的,不能被修改
int x = 0, y = 2;
auto swap1 = [add1](int& x, int& y) {
	int tmp = x;
	x = y;
	y = tmp;

	cout << add1(x, y) << endl;
};
swap1(a, b);
int x = 0, y = 2;
auto swap1 = [x, y]() mutable {
	// mutable讓捕捉的x和y可以改變了,
	// 但是他們依舊是外面x和y的拷貝
		int tmp = x;
		x = y;
		y = tmp;
	};
	swap1();

6)lambda在實現(xiàn)交換函數(shù)swap()時常用【傳引用傳參】而不是【傳值傳參+mutable】

  • 在小點4中,我們是用下面代碼實現(xiàn)swap()
int x = 0, y = 2;
auto swap1 = [x, y]() mutable {
	// mutable讓捕捉的x和y可以改變了,
	// 但是他們依舊是外面x和y的拷貝
		int tmp = x;
		x = y;
		y = tmp;
	};
	swap1();
  • 但是這一回略顯繁瑣,我們一般用【傳引用傳參】而不是【傳值傳參+mutable】,如下所示:
// 引用的方式捕捉
	int x = 0, y = 2;
	auto swap2 = [&x, &y](){
		int tmp = x;
		x = y;
		y = tmp;
	};
	swap2();

到了這里,關(guān)于【C++】lambda表達式語法詳細解讀(代碼演示,要點解析)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權(quán),不承擔相關(guān)法律責任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務器費用

相關(guān)文章

  • 【C++】 Lambda表達式詳解

    【C++】 Lambda表達式詳解

    描述 記得去年立了一個重學C++新特性的flag,可是真的太忙了,大部分精力都花在全棧上了,今年開始看一些開源源碼,發(fā)現(xiàn)各種奇怪的語法,根本看不懂, 不學不行 了。而且接觸了很多語言后,發(fā)現(xiàn)新特性的確能 提高開發(fā)效率 ,所以還是重新學習下C++吧。 環(huán)境 版本號 描

    2024年02月08日
    瀏覽(35)
  • 【C++】Lambda表達式的使用

    【C++】Lambda表達式的使用

    例如: 了解Lambda的優(yōu)點 掌握Lambda表達式的使用 了解Lambda表達式的底層原理 Lambda表達式的語法 lambda表達式的底層實現(xiàn)涉及到閉包(Closure)的概念。閉包是一個函數(shù)對象,它可以捕獲外部作用域中的變量,并在其生命周期內(nèi)訪問和修改這些變量。lambda表達式的底層實現(xiàn)就是通

    2024年02月14日
    瀏覽(20)
  • C++復習筆記--Lambda表達式

    ① [] 用于捕獲變量,一般用于使用和修改外部的變量,可以為空; ② (int a, int b) 表示參數(shù)列表,可以省略; ③ - int 定義返回類型,一般可以省略,讓編譯器自動推斷; ④ auto f 表示將定義的 lambda 表達式賦值給對象 f,auto 用于自動推斷類型; 基本用法如下: ① 使用和修

    2024年02月16日
    瀏覽(26)
  • 【C++】C++11——lambda表達式

    【C++】C++11——lambda表達式

    我們之前都是通過函數(shù)指針、仿函數(shù)的方式可以像函數(shù)使用的對象,在C++11之后,就有了Lambda表達式 為了實現(xiàn)一個比較算法, 都要重新去寫一個類,如果每次比較的邏輯不一樣,還要去實現(xiàn)多個類,特別是相同類的命名,看代碼的人就遭殃了,非常的煩,這些都非常地不方便

    2024年01月17日
    瀏覽(21)
  • C++的lambda表達式(匿名函數(shù))

    從C++11開始,C++也支持使用lambda表達式(匿名函數(shù))。Lambda表達式是一種便捷的方式,可以定義一個函數(shù)對象,而無需使用顯式的函數(shù)對象類型或函數(shù)指針語法。 C++中的 lambda表達式的基本語法如下: 其中各個部分的含義如下: capture list :用于指定所捕獲的外部變量列表???/p>

    2024年02月08日
    瀏覽(48)
  • C++ Lambda表達式的常見用法

    C++ Lambda表達式的常見用法

    ??我叫憶_恒心,一名喜歡書寫博客的在讀研究生?????。 如果覺得本文能幫到您, 麻煩點個贊 ??唄! 近期會不斷在專欄里進行更新講解博客~~~ 有什么問題的小伙伴 歡迎留言提問歐,喜歡的小伙伴給個三連支持一下唄。?????? 作為C++11的新特性的Lambada表達式本身

    2024年01月16日
    瀏覽(37)
  • C++系列十:日常學習-Lambda表達式

    目錄 前言 必備理論知識: 例子: 20230920 加 例如 對函數(shù)指針和指針函數(shù)補充: 有C#經(jīng)驗,使用起來,駕輕就熟。 就是語法糖。但是也要熟悉用法,才好眾享絲滑。 內(nèi)容參考: Chatjpt、文心一言 C++ lambda 表達式是一種功能強大的編程工具,它允許您在代碼中創(chuàng)建匿名函數(shù)或閉

    2024年02月08日
    瀏覽(19)
  • C++ lambda表達式函數(shù)遞歸調(diào)用簡單寫法實現(xiàn)

    在C++11中,lambda表達式函數(shù)遞歸往往會帶上 functional 頭文件。書寫形式如下: 還有相對簡單點的第二種寫法(C++14): 對于第二種, auto fib 的作用是為了在 lambda 表達式內(nèi)部能夠遞歸調(diào)用自身。在 C++14 中,lambda 表達式默認是無法直接遞歸調(diào)用的,因為在 lambda 內(nèi)部無法訪問到

    2024年02月15日
    瀏覽(29)
  • Learning C++ No.30 【lambda表達式實戰(zhàn)】

    Learning C++ No.30 【lambda表達式實戰(zhàn)】

    北京時間:2023/6/9/9:13,今天8:15起床,可能是最近課非常少,導致寫博客沒什么壓力,什么時間都能寫,導致7點起不來,哈哈哈,習慣睡懶覺了,但是問題不大,還在可控范圍內(nèi),并且就在前天下午,我們進行了學校MySQL的期末考試,大一就學MySQL,我甚是想吐糟,實操題對于

    2024年02月08日
    瀏覽(31)
  • C++結(jié)合Lambda表達式在函數(shù)內(nèi)部實現(xiàn)遞歸

    C++結(jié)合Lambda表達式在函數(shù)內(nèi)部實現(xiàn)遞歸

    529. 掃雷游戲 已解答 中等 相關(guān)標簽 相關(guān)企業(yè) 讓我們一起來玩掃雷游戲! 給你一個大小為? m x n ?二維字符矩陣? board ?,表示掃雷游戲的盤面,其中: \\\'M\\\' ?代表一個? 未挖出的 ?地雷, \\\'E\\\' ?代表一個 ?未挖出的? 空方塊, \\\'B\\\' ? 代表沒有相鄰(上,下,左,右,和所有4個

    2024年02月21日
    瀏覽(20)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包