C 语言

关注公众号 jb51net

关闭
首页 > 软件编程 > C 语言 > ​​C++11Lambda表达式

​​C++11系列学习之Lambda表达式

作者:小杰编程

这篇文章主要介绍了​​C++11系列学习之Lambda表达式,C++11终于也引入了lambda表达式,lambda最早来源于函数式编程,现代语言慢慢都引入了这个语法,下文关于​​C++11Lambda表达式相关内容需要的小伙伴可以参考一下

前言:

终于在C++11中引入了lambda表达式,lambda最早来源于函数式编程,现代语言慢慢都引入了这个语法,C++也不甘落后,在新标准中加入了lambda表达式。

一、为什么要有lambda表达式?

二、使用语法

lambda的通用语法:[ 捕获列表] ( 参数表 ) 函数选项 -> 返回值类型 { 函数体 ;};

捕获列表

mutable影响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)

std::bind和lambda表达式结合

//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);

三、std::function 和lambda表达式选择

lambdastd::function效果是一样的,但是更加简洁一些,但不能完全代替,因为一些老的库不支持lambda表达式

到此这篇关于​​C++11系列学习之Lambda表达式的文章就介绍到这了,更多相关​​C++11Lambda表达式内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文