Lambda表达式是C++11最重要也是最常用的特性之一,是现代编程语言的一个特点,简洁,提高了代码的效率并且可以使程序更加灵活
Lambda表达式就是一个匿名函数,所谓匿名函数,那自然是没有名字的函数,当一个函数只是临时使用而且比较简单的时候,就可以采用Lambda表达式
Lambda表达式的语法格式如下:
当你不需要capture捕获的时候,就直接写一个框框
[]
当你不需要参数的时候,就直接写一个括号()
当年不需要返回值的时候,不用写箭头->
和ret(返回值类型)
[capture](params) opt -> ret {body;};
- capture: 捕获列表
- params: 参数列表
- opt: 函数选项
- ret: 返回值类型
- body: 函数体
// 示例代码->匿名函数的调用:
int ret = [](int a) -> int
{
return a+1;
}(100);
关于Lambda表达式的细节介绍:
[]
- 不捕捉任何变量[&]
- 捕获外部作用域中所有变量, 并作为引用在函数体内使用 (按引用捕获
)[=]
- 捕获外部作用域中所有变量, 并作为副本在函数体内使用 (按值捕获
)
[=, &foo]
- 按值捕获外部作用域中所有变量, 并按照引用捕获外部变量 foo[bar]
- 按值捕获 bar 变量, 同时不捕获其他变量[&bar]
- 按值捕获 bar 变量, 同时不捕获其他变量[this]
- 捕获当前类中的this指针
可以省略
下面实现一个最简单的lambda表达式,没有返回值,没有参数
[]()
{
cout << "这是lambda表达式" <<endl;
};
以上只是定义,如果要使用的话,在函数的末尾加上参数列表,代表要传的参数
比如这样
[]()
{
cout << "这是lambda表达式" <<endl;
}();
这样这个lambda表达式就会运行,如果有参数的话,底下那个括号要填参数,有返回值的话要有箭头和返回值类型,大概基础的部分就是这么多。
原文:https://www.cnblogs.com/wanghongyang/p/14881406.html