最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C++?和?C#?中的?lambda的方法技巧

 更新時(shí)間:2022年06月17日 11:12:08   作者:www_xuhss_com  
這篇文章主要介紹了C++?和?C#?中的?lambda的方法技巧,文章圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,感興趣的小伙伴可以參考一下

前言:

這幾天在看 C++ 的 lambda 表達(dá)式,挺有意思,這個(gè)標(biāo)準(zhǔn)是在 C11標(biāo)準(zhǔn) 加進(jìn)去的,也就是 2011 年,相比 C# 2007 還晚了個(gè) 4 年, Lambda 這東西非常好用,會上癮,今天我們簡單聊一聊。

一、語法定義

首先我們看下 C++ 語法定義格式:

[capture] (parameters) mutable ->return-type{statement}

相比 C# lambda 的語法格式:

(parameters) => {return-type statement}

要復(fù)雜一些,之所以復(fù)雜還是因?yàn)?C++ 讓程序員用的必須更謹(jǐn)慎一些。

二、謹(jǐn)慎在哪里?

為了說明更謹(jǐn)慎在哪里,我們上一個(gè)簡單的例子。

int main() {
	int a = 1;
	int b = 2;
	auto func = [](int c) -> void {
		cout << "input:" << c << endl;
	};
	func(10);
	return 0;
}

上面就定義了一個(gè)原子化的 lambda 函數(shù),在現(xiàn)實(shí)開發(fā)中往往不僅要獲取參數(shù),還要獲取 外部作用域 的變量,比如說,我想計(jì)算 a+b+c 的結(jié)果,

接下來稍微改一下代碼:

可以看到,居然給報(bào)錯(cuò)了,在 C# 中可是一點(diǎn)問題都沒有。

謹(jǐn)慎1 :屏蔽外部所有作用域變量

C++ 默認(rèn)屏蔽所有的外部作用域值,這么做大概率還是想讓程序員知道自己的意圖,這相比 C# 要嚴(yán)謹(jǐn)?shù)亩?,算是喜憂參半吧。

那如何讓 C++ 代碼通過呢? 這就需要用到語法格式中的 [capture] 部分,簡而言之就是需要告訴編譯器打開柵欄放哪些變量進(jìn)來??????,比如 =,&,兩者都可以訪問所有的外部作用域變量,不同的是前者是 按傳值方式,后者 按引用方式 。

按值方式

有了思路后,修改代碼如下:

int main() {
	int a = 1;
	int b = 2;
	auto func = [=](int c) -> void {
		auto sum = a + b + c;
		cout << "sum:" << sum << endl;
	};
	func(10);
	return 0;
}

哈哈,這個(gè)問題我們完美搞定。

按引用方式

大家都知道,按引用 傳的是地址,言外之意就是可以做到 原地修改,接下來我們修改下代碼。

int main() {
	int a = 1;
	auto func1 = [&]() -> void {
		a = 10;
	};
	func1();
	cout << "a =" << a << endl;
	return 0;
}

謹(jǐn)慎2:屏蔽所有按值傳遞的修改

為了方便說明,我們先看圖:

可以看到,按值傳遞進(jìn)來的值都是無法修改的,這么做主要還是怕程序員弄混了,如果一定要讓代碼通過,就需要增加語法格式中的 mutable 項(xiàng),本質(zhì)上就是踢掉默認(rèn)的 const ,這樣在方法體中就可以修改 a 變量,

修改代碼如下:

int main() {
	int a = 1;
	auto func1 = [=]() mutable -> void {
		a = 10;
	};
	func1();
	cout << "a =" << a << endl;
	return 0;
}

哈哈,成功修改,當(dāng)然語句夠簡單的話,還可以將下面的代碼:

auto func1 = [&]() -> void {
		a = 10;
	};

修改成如下:

auto func1 = [&]() {
		a = 10;
	};

關(guān)于作用域方面還有很多好玩的,比如只放某一個(gè)變量進(jìn)來。

總體上來說,C++ 的 lambda 的格式相比 C# 更嚴(yán)謹(jǐn),反過來說就是不太相信 C++ 程序員有能力用好。

到此這篇關(guān)于C++ 和 C# 中的 lambda的方法技巧的文章就介紹到這了,更多相關(guān)C++ lambda 內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • C語言實(shí)現(xiàn)二叉樹鏈?zhǔn)浇Y(jié)構(gòu)的示例詳解

    C語言實(shí)現(xiàn)二叉樹鏈?zhǔn)浇Y(jié)構(gòu)的示例詳解

    這篇文章主要為大家詳細(xì)介紹了C語言實(shí)現(xiàn)二叉樹鏈?zhǔn)浇Y(jié)構(gòu)的相關(guān)資料,文中的示例代碼講解詳細(xì),對我們學(xué)習(xí)C語言有一定的幫助,需要的可以參考一下
    2022-11-11
  • C語言中循環(huán)嵌套的應(yīng)用方式

    C語言中循環(huán)嵌套的應(yīng)用方式

    這篇文章主要介紹了C語言中循環(huán)嵌套的應(yīng)用方式,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-02-02
  • C++ 中assert()函數(shù)用法總結(jié)

    C++ 中assert()函數(shù)用法總結(jié)

    這篇文章主要介紹了C++ 中assert()函數(shù)用法總結(jié)的相關(guān)資料,需要的朋友可以參考下
    2017-07-07
  • C語言選擇排序算法及實(shí)例代碼

    C語言選擇排序算法及實(shí)例代碼

    本篇文章主要介紹了 C語言選擇排序算法,這里提供代碼實(shí)例以便大家理解,通過本文,更好的理解排序算法
    2016-07-07
  • 枚舉窗口句柄后關(guān)閉所有窗口示例

    枚舉窗口句柄后關(guān)閉所有窗口示例

    這篇文章主要介紹了關(guān)閉所有窗口的方法,原理是枚舉所有窗口句柄,然后發(fā)送WM_CLOSE消息來關(guān)閉窗口,需要的朋友可以參考下
    2014-01-01
  • C/C++實(shí)現(xiàn)快速排序的方法

    C/C++實(shí)現(xiàn)快速排序的方法

    這篇文章主要介紹了C/C++實(shí)現(xiàn)快速排序的方法,這幾天在找工作,被問到快速排序,結(jié)果想不出來快速排序怎么弄的;回來搜索了一下,現(xiàn)在記錄下來,方便以后查看。
    2014-12-12
  • C++分析講解類的靜態(tài)成員變量是什么

    C++分析講解類的靜態(tài)成員變量是什么

    在C++中,靜態(tài)成員是屬于整個(gè)類的而不是某個(gè)對象,靜態(tài)成員變量只存儲一份供所有對象共用。所以在所有對象中都可以共享它。使用靜態(tài)成員變量實(shí)現(xiàn)多個(gè)對象之間的數(shù)據(jù)共享不會破壞隱藏的原則,保證了安全性還可以節(jié)省內(nèi)存
    2022-04-04
  • C語言中打印特殊圖案的實(shí)現(xiàn)代碼

    C語言中打印特殊圖案的實(shí)現(xiàn)代碼

    以下代碼實(shí)現(xiàn)了在C語言中打印特殊圖案的解決方法。需要的朋友參考下
    2013-05-05
  • c++中用TINYXML解析XML文件

    c++中用TINYXML解析XML文件

    這篇文章主要介紹了c++中如何用TINYXML解析XML文件,文中案例非常詳細(xì),幫助大家更好的了解和學(xué)習(xí),感興趣的朋友可以了解下
    2020-06-06
  • 一文詳解C++中的mutable關(guān)鍵字

    一文詳解C++中的mutable關(guān)鍵字

    在C++中mutable關(guān)鍵字正如字面意思所示,表示「可變的」之意,一般在以下兩種情況中使用較多,一是修飾類中的變量,用來突破const的限制,二是在Lambda表達(dá)式中使用,用來捕獲修改表達(dá)式之外的變量值,下面我們就針對這兩種使用場景逐個(gè)介紹
    2023-10-10

最新評論

务川| 邛崃市| 施秉县| 宜州市| 怀安县| 通渭县| 北辰区| 锡林浩特市| 滨海县| 马山县| 饶平县| 峡江县| 正阳县| 托里县| 古蔺县| 太和县| 庄浪县| 皋兰县| 吉安县| 醴陵市| 柳河县| 名山县| 固安县| 蒲江县| 全椒县| 邛崃市| 康乐县| 雷州市| 庆城县| 静海县| 柳河县| 炉霍县| 广宁县| 清水县| 教育| 罗田县| 古浪县| 三穗县| 福建省| 松桃| 易门县|