C + + L a m b d a 表达式 C++\ Lambda表达式 C++ Lambda表达式
一、Lambda表达式的完整语法
[capture list] (params list) mutable exception -> return type {function body}
单词 | 含义 |
---|---|
capture list | 捕获外部变量列表 |
params list | 形参列表 |
mutable | 用来说明是否可以修改捕获的变量 |
exception | 异常设定 |
return type | 返回类型 |
function body | 函数体 |
二、三种常见的lambda表达式格式
序号 | 表达式 |
---|---|
1 | [capture list] (params list) -> return type {function body} |
2 | [capture list] (params list) {function body} |
3 | [capture list] {function body} |
三、capture list
capture list | 说明 |
---|---|
[=] | 按值捕获所有外围变量 |
[&] | 按引用捕获所有外围变量 |
[=, &n] or [&n, =] | 按引用捕获n,按值捕获其它外围变量 |
[&, n] or [n, &] | 按值捕获n,按引用捕获其他外围变量 |
注意:不能以同一方式重复捕获某变量,例如[&, &n]
是不合法的表达式。
四、mutable
mutable
关键字的作用是用来解除按值捕获的变量的const
限制,从而允许在 lambda 函数体内修改被捕获的变量的值。
它与按引用捕获不一样,它修改的是捕获变量的拷贝,不会修改捕获的外围变量。(用的少)
五、return type
return type
可以省略,编译器会自动推导返回类型。
未省略 return type
时,->
也不能省略。
六、简单应用
sort
函数中:
// sort 逆序排序
1------------------------
sort(a, a + n, [](int x, int y){
return x > y;
});
2------------------------
auto f = [](int x, int y){
return x > y;
};
sort(a, a + n, f);