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编辑  收藏  举报

导航