??C++11系列學習之Lambda表達式
前言:
終于在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表達式選擇
lambda和std::function的效果是一樣的,但是更加簡潔一些,但不能完全代替,因為一些老的庫不支持lambda表達式
到此這篇關(guān)于??C++11系列學習之Lambda表達式的文章就介紹到這了,更多相關(guān)??C++11Lambda表達式內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
C++中幾種將整數(shù)轉(zhuǎn)換成二進制輸出的方法總結(jié)
下面小編就為大家?guī)硪黄狢++中幾種將整數(shù)轉(zhuǎn)換成二進制輸出的方法總結(jié)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2016-09-09
c++ lambda捕獲this 導致多線程下類釋放后還在使用的錯誤問題
Lambda表達式是現(xiàn)代C++的一個語法糖,挺好用的。但是如果使用不當,會導致內(nèi)存泄露或潛在的崩潰問題,這里總結(jié)下c++ lambda捕獲this 導致多線程下類釋放后還在使用的錯誤問題,感興趣的朋友一起看看吧2023-02-02
你知道如何自定義sort函數(shù)中的比較函數(shù)
這篇文章主要介紹了如何自定義sort函數(shù)中的比較函數(shù),具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-12-12
C++實現(xiàn)十六進制字符串轉(zhuǎn)換為十進制整數(shù)的方法
這篇文章主要介紹了C++實現(xiàn)十六進制字符串轉(zhuǎn)換為十進制整數(shù)的方法,涉及C++字符串與數(shù)制轉(zhuǎn)換的相關(guān)技巧,具有一定參考借鑒價值,需要的朋友可以參考下2015-07-07

