目录一、为什么要有lambda表达式?二、使用语法捕获列表mutable影响lambda表达式std::bind和lambda表达式结合三、std::function 和lambda
前言:
终于在c++11中引入了lambda表达式,lambda最早来源于函数式编程,现代语言慢慢都引入了这个语法,C++也不甘落后,在新标准中加入了lambda表达式。
lambda的通用语法:[ 捕获列表] ( 参数表 ) 函数选项 -> 返回值类型 { 函数体 ;};
被mutable 修饰的lambda表达式就算没有参数也要写明参数列表,若没有加mutable,lambda不能修改这个变量的值,只能使用。 但是被修饰后的lambda表达式,会像函数传递参数一样,在内部定义一个变量并拷贝这个值。
#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;
}
可以把它视为带有重载括号运算符的仿函数,并且没有捕获任何变量的lambda表达式可以被转换成一个普通的函数指针
//用std::function来存储和操作lambda表达式
std::function<int, int> f1 = [](int a){ return a};
//转换为一个普通的函数指针
using fun = int(*){int};
fun f =[](int a){return a;}
f(1)
//eg : 用来集合中计算大于5小于10的元素的个数
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);
lambda
和std::function
的效果是一样的,但是更加简洁一些,但不能完全代替,因为一些老的库不支持lambda表达式
到此这篇关于C++11系列学习之Lambda表达式的文章就介绍到这了,更多相关C++11Lambda表达式内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!
--结束END--
本文标题: C++11系列学习之Lambda表达式
本文链接: https://www.lsjlt.com/news/147219.html(转载时请注明来源链接)
有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341
下载Word文档到电脑,方便收藏和打印~
2024-03-01
2024-03-01
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
回答
回答
回答
回答
回答
回答
回答
回答
回答
回答
0