C++中Lambda表达式浅析
2021-06-13 22:26
1251 查看
1. Lambda表达式
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表达式拥有和当前类成员函数同样的访问权限
- 如果已经使用了 & 或者 =, 默认添加此选项
- 参数列表: 和普通函数的参数列表一样
- opt 选项 -->
可以省略
-
mutable: 可以修改按值传递进来的拷贝(注意是能修改拷贝,而不是值本身)
- exception: 指定函数抛出的异常,如抛出整数类型的异常,可以使用throw();
- 返回值类型:
-
标识函数返回值的类型,当返回值为void,或者函数体中只有一处return的地方(此时编译器可以自动推断出返回值类型)时,这部分可以省略
- 函数体:
-
函数的实现,这部分不能省略,但函数体可以为空。
2. 实列
下面实现一个最简单的lambda表达式,没有返回值,没有参数
[]() { cout << "这是lambda表达式" <<endl; };
以上只是定义,如果要使用的话,在函数的末尾加上参数列表,代表要传的参数
比如这样
[]() { cout << "这是lambda表达式" <<endl; }();
这样这个lambda表达式就会运行,如果有参数的话,底下那个括号要填参数,有返回值的话要有箭头和返回值类型,大概基础的部分就是这么多。
相关文章推荐
- 浅析C++中的this指针
- C++ 覆盖 重载 隐藏 浅析
- C++ 类继承与对象赋值 情况下 成员变量的覆盖 浅析
- 浅析C++中的异常
- C++调用Python浅析
- C++中的lambda表达式
- C++中的new与delete简单浅析
- 浅析C++中的is-a和has-a关系(公有继承、包含、私有继承)
- C++浅析——继承类中构造和析构顺序
- C++ scanf 函数与EOF 浅析
- 浅析C++中结构体的定义、初始化和引用
- 浅析C++临时对象的产生相关问题
- C++ typedef 与 define 浅析
- 指针赋值 int a[5]={.... ...}, a 、&a[0]、 &a三者之间的区别 浅析 C/C++求职面试必备考点(五)
- 浅析C++多线程内存模型
- C++lambda表达式
- 浅析C/C++中的switch/case陷阱
- C++ 智能指针weak_ptr用途浅析
- 【iOS-Cocos2d游戏开发之十二】浅析使用C++/C/OC进行iOS游戏混编出现“failed with exit”问题与小结;
- 浅析C++继承与多态