C ++的lamada表达式
时间: 2024-03-27 10:40:55 浏览: 113
C++11引入了Lambda表达式,使得C++也具备了函数式编程的能力。Lambda表达式的语法格式如下:
```c++
[capture-list] (params) -> return-type { body }
```
其中,`capture-list`是捕获列表,用于捕获外部变量;`params`是参数列表;`return-type`是返回值类型;`body`是函数体。Lambda表达式可以像函数一样被调用,也可以作为参数传递给其他函数。例如,要定义一个Lambda表达式来计算两个整数的和,可以使用如下代码:
```c++
#include <iostream>
int main() {
// 定义Lambda表达式
auto sum = [](int a, int b) -> int { return a + b; };
// 使用Lambda表达式
std::cout << sum(1, 2) << std::endl; // 输出3
return 0;
}
```
在上面的代码中,我们使用`auto`关键字来推导Lambda表达式的类型,省去了显式地声明类型。Lambda表达式的捕获列表可以使用`[]`、`[&]`、`[=]`、`[this]`等形式,表示不捕获任何变量、捕获所有外部变量、按值捕获所有外部变量、捕获当前对象等。Lambda表达式还支持尾返回类型推导,可以省略`-> return-type`部分,让编译器自动推导返回值类型。
相关问题
C ++的lamada表达式的完整用法
Lambda表达式是C++11引入的一种匿名函数的语法,它可以方便地定义一个简单的函数对象,用于某些需要函数对象的场合,例如STL中的算法函数、线程库、信号槽等等。
Lambda表达式的一般形式如下:
```
[capture-list](parameter-list) -> return-type { function-body }
```
其中,`capture-list`表示所捕获的外部变量列表,`parameter-list`表示函数参数列表,`return-type`表示返回值类型,`function-body`表示函数体。
下面是Lambda表达式的完整用法:
1. 无参数无返回值的Lambda表达式
```cpp
[]() {
// 函数体
}
```
2. 有参数无返回值的Lambda表达式
```cpp
[](int x, int y) {
// 函数体
}
```
3. 有参数有返回值的Lambda表达式
```cpp
[](int x, int y) -> int {
// 函数体
}
```
4. 捕获外部变量的Lambda表达式
```cpp
int a = 10;
int b = 20;
[=]() {
std::cout << a << " " << b << std::endl;
}
```
5. 复杂的Lambda表达式
```cpp
int a = 10;
int b = 20;
auto lambda_func = [a, &b](int x, int y) -> int {
int result = a + b + x + y;
b++;
return result;
};
```
在这个例子中,Lambda表达式捕获了外部变量`a`,并以值传递的方式使用,同时捕获了变量`b`的引用,并在函数体中修改了它的值。Lambda表达式还有一个返回值,类型为`int`。最后,Lambda表达式被赋值给了一个变量`lambda_func`,可以像普通函数一样调用它。
C 的lamada表达式
C语言本身并不支持Lambda表达式,但可以通过函数指针和函数指针的类型推导来模拟Lambda表达式的效果。例如,要定义一个Lambda表达式来计算两个整数的和,可以使用如下代码:
```c
#include <stdio.h>
int main() {
// 定义Lambda表达式
int (*sum)(int, int) = [](int a, int b) -> int { return a + b; };
// 使用Lambda表达式
printf("%d\n", sum(1, 2)); // 输出3
return 0;
}
```
在上面的代码中,我们定义了一个函数指针sum,它接受两个整数作为参数,返回它们的和。其中,`[]`表示Lambda表达式的开始,`(int a, int b)`表示Lambda表达式的参数列表,`-> int`表示Lambda表达式的返回值类型,`{ return a + b; }`表示Lambda表达式的函数体。然后,我们可以像调用普通函数一样使用Lambda表达式。
阅读全文