c++11新特性-10-Lambda表达式

文章目录

Lambda表达式

1.基本语法

cpp 复制代码
[capture](params) opt ->ret {body;};

capture是捕获列表,params是参数列表,opt 是函数选项 ret 是返回值类型,body是函数体。

  1. 捕获列表 []:捕获一定范围内的变量
  2. 参数列表 (): 和普通函数的参数列表一样,如果没有参数参数列表可以省略不写。
  3. opt 选项,不需要可以省略
    mutabe: 可以修改按值传递进来的拷贝(注意是能修改拷贝,而不是值本身)
    exception: 指定函数抛出的异常,如抛出整数类型的异常,可以使用throw ();
  4. 返回值类型:在 C++11 中,lambda 表达式的返回值是通过返回值后置语法来定义的。
  5. 函数体:函数的实现,这部分不能省略,但函数体可以为空。
cpp 复制代码
[](){...}

捕获列表具体使用方式

  • \] --不捕捉任何变量。

  • =\] --捕获外部作用域中所有变量,并作为副本在函数体内使用(`按值捕获`)。

  • =,\&foo\]-按值捕获外部作用域中所有变量,并按照引用捕获外部变量 foo。

  • \&bar\]--按引用捕获 bar 变量,同时不捕获其他变量 。

2.案例

cpp 复制代码
class Test
{
public:
	
	void fun(int x,int y)
	{
		auto i = [](){ return x;}; //错误
		auto j = [=](){return x + y + age;} //正确
		auto k = [this](){ return age;} //正确
		auto u = [this](){ return x + y + age;} //错误
		auto v = [this,x,y](){return x + y + age;} //正确
	}
	int age;
};

除了引用之外,其余都是拷贝,这些拷贝的数据都是只读

相关推荐
wearegogog1232 分钟前
基于Q-learning的栅格地图路径规划MATLAB仿真程序
开发语言·算法·matlab
旖-旎5 分钟前
深搜练习(组合总和)(7)
c++·算法·深度优先·力扣
T0uken12 分钟前
基于 vcpkg 与 LLVM-MinGW 的 Qt6 静态链接开发方案
c++·windows·qt
睡一觉就好了。15 分钟前
C++11(一)
c++
csbysj202017 分钟前
Java 条件语句
开发语言
水云桐程序员32 分钟前
C++的主要应用场景
c++·学习方法
Ulyanov1 小时前
《现代 Python 桌面应用架构实战:PySide6 + QML 从入门到工程化》 开发环境搭建与工具链极简主义 —— 拒绝臃肿,构建工业级基座
开发语言·python·qt·ui·架构·系统仿真
逻辑驱动的ken1 小时前
Java高频面试场景题19
java·开发语言·面试·职场和发展·求职招聘
初心未改HD1 小时前
Go语言net/http与Web开发:构建高性能HTTP服务
开发语言·golang
叼烟扛炮2 小时前
C++第一讲:C++ 入门基础
开发语言·c++·函数重载·引用·内联函数·nullptr