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

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

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

前言:

這幾天在看 C++ 的 lambda 表達式,挺有意思,這個標準是在 C11標準 加進去的,也就是 2011 年,相比 C# 2007 還晚了個 4 年, Lambda 這東西非常好用,會上癮,今天我們簡單聊一聊。

一、語法定義

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

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

相比 C# lambda 的語法格式:

(parameters) => {return-type statement}

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

二、謹慎在哪里?

為了說明更謹慎在哪里,我們上一個簡單的例子。

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

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

接下來稍微改一下代碼:

可以看到,居然給報錯了,在 C# 中可是一點問題都沒有。

謹慎1 :屏蔽外部所有作用域變量

C++ 默認屏蔽所有的外部作用域值,這么做大概率還是想讓程序員知道自己的意圖,這相比 C# 要嚴謹?shù)亩啵闶窍矐n參半吧。

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

按值方式

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

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;
}

哈哈,這個問題我們完美搞定。

按引用方式

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

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

謹慎2:屏蔽所有按值傳遞的修改

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

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

修改代碼如下:

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

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

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

修改成如下:

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

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

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

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

相關(guān)文章

  • C語言實現(xiàn)二叉樹鏈式結(jié)構(gòu)的示例詳解

    C語言實現(xiàn)二叉樹鏈式結(jié)構(gòu)的示例詳解

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

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

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

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

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

    C語言選擇排序算法及實例代碼

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

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

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

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

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

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

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

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

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

    c++中用TINYXML解析XML文件

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

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

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

最新評論

虎林市| 乌苏市| 韩城市| 阳山县| 纳雍县| 建德市| 天峨县| 藁城市| 平昌县| 襄城县| 台湾省| 大宁县| 锡林浩特市| 星子县| 陇南市| 喀喇| 克山县| 汉沽区| 常山县| 新民市| 于都县| 车险| 杂多县| 广宁县| 东乡族自治县| 罗定市| 宣化县| 兴化市| 克山县| 西贡区| 泸水县| 江口县| 翁牛特旗| 肃北| 昌吉市| 宝坻区| 铜鼓县| 双鸭山市| 南投县| 石屏县| 宁城县|