c++11 Lambda
基本写法
[capture list] (params list) mutable exception-> return type { function body }
capture list:捕获外部变量列表
params list:形参列表
mutable指示符:用来说用是否可以修改捕获的变量
exception:异常设定
return type:返回类型
function body:函数体
省略写法
[capture list] (params list) -> return type {function body}
[capture list] (params list) {function body}
[capture list] {function body}
外部变量
[a]{} //值捕获
[&a]{} //引用捕获
[=]{} 隐式捕获
捕获形式 | 说明 |
---|---|
[] | 不捕获任何外部变量 |
[变量名, …] | 默认以值得形式捕获指定的多个外部变量(用逗号分隔),如果引用捕获,需要显示声明(使用&说明符) |
[this] | 以值的形式捕获this指针 |
[=] | 以值的形式捕获所有外部变量 |
[&] | 以引用形式捕获所有外部变量 |
[=, &x] | 变量x以引用形式捕获,其余变量以传值形式捕获 |
[&, x] | 变量x以值的形式捕获,其余变量以引用形式捕获 |
参数限制:
参数列表中不能有默认参数
不支持可变参数
所有参数必须有参数名
C++ lambda 捕获模式
lambda 表达式实际上会由编译器创建一个 std::function 对象,以值的方式捕获的变量则会由编译器复制一份,在 std::function 对象中创建一个对应的类型相同的 const 成员变量.
posted on 2021-03-10 10:24 WillingCPP 阅读(51) 评论(0) 编辑 收藏 举报