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

??C++11系列學習之Lambda表達式

 更新時間:2022年04月25日 10:20:38   作者:小杰編程  
這篇文章主要介紹了??C++11系列學習之Lambda表達式,C++11終于也引入了lambda表達式,lambda最早來源于函數(shù)式編程,現(xiàn)代語言慢慢都引入了這個語法,下文關(guān)于??C++11Lambda表達式相關(guān)內(nèi)容需要的小伙伴可以參考一下

前言:

終于在C++11中引入了lambda表達式,lambda最早來源于函數(shù)式編程,現(xiàn)代語言慢慢都引入了這個語法,C++也不甘落后,在新標準中加入了lambda表達式。

一、為什么要有l(wèi)ambda表達式?

  • 使用方便,就地聲明函數(shù)或函數(shù)對象,尤其是和bind配合食用更佳
  • 簡潔,可以匿名創(chuàng)建,語法看起來極其舒適
  • 可以實現(xiàn)功能閉包,使用起來更加靈活

二、使用語法

lambda的通用語法:[ 捕獲列表] ( 參數(shù)表 ) 函數(shù)選項 -> 返回值類型 { 函數(shù)體 ;};

捕獲列表

  • [] 不捕獲任何變量
  • [&] 以引用方式捕獲外部作用域中所有變量
  • [=] 以值的方式捕獲外部作用域中的所有變量
  • [= , &x] 以值方式捕獲外部作用域變量,但是以引用方式捕獲x變量
  • [ x ] 按值方式捕獲 x 變量
  • [ this ] 捕獲當前類的this指針,那么lambda表達式擁有了和類成員函數(shù)同樣的權(quán)限,如果使用了& 或 = 那么默認添加了此項

mutable影響lambda表達式

被mutable 修飾的lambda表達式就算沒有參數(shù)也要寫明參數(shù)列表,若沒有加mutable,lambda不能修改這個變量的值,只能使用。 但是被修飾后的lambda表達式,會像函數(shù)傳遞參數(shù)一樣,在內(nèi)部定義一個變量并拷貝這個值。

#include <iostream>

using namespace std;

int main()
{
size_t t = 9;
auto f = [t] () mutable {return ++t; };
cout << f() << endl; //10
cout << f() << endl; //11
cout << "t:" << t << endl; //9
return 0;
}

可以把它視為帶有重載括號運算符的仿函數(shù),并且沒有捕獲任何變量的lambda表達式可以被轉(zhuǎn)換成一個普通的函數(shù)指針

//用std::function來存儲和操作lambda表達式
std::function<int, int> f1 = [](int a){ return a};

//轉(zhuǎn)換為一個普通的函數(shù)指針
using fun = int(*){int};
fun f =[](int a){return a;}

f(1)

std::bind和lambda表達式結(jié)合

//eg : 用來集合中計算大于5小于10的元素的個數(shù)
auto f = std::(std::logical_and<bool>(), std::bind( std::greater<int>(), _1, 5), std::bind(std::lesss<int>(),_1, 10));

int count = std::count::_if(coll.bengin(), coll.end(),f);

三、std::function 和lambda表達式選擇

lambdastd::function效果是一樣的,但是更加簡潔一些,但不能完全代替,因為一些老的庫不支持lambda表達式

到此這篇關(guān)于??C++11系列學習之Lambda表達式的文章就介紹到這了,更多相關(guān)??C++11Lambda表達式內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評論

靖江市| 山西省| 永修县| 汽车| 米脂县| 康保县| 乐平市| 新沂市| 芦山县| 鲜城| 东安县| 丰原市| 宁陕县| 确山县| 西盟| 马关县| 正镶白旗| 资阳市| 德惠市| 定远县| 台江县| 综艺| 汉源县| 涪陵区| 五家渠市| 通榆县| 简阳市| 韶关市| 甘南县| 黎川县| 仙桃市| 兴义市| 吉木乃县| 汽车| 沙洋县| 余江县| 永吉县| 澄迈县| 松江区| 西乌珠穆沁旗| 化德县|