c++ lambda表达式用法
时间: 2023-09-05 08:06:48 浏览: 219
C++11引入了Lambda表达式,它是一种匿名函数,可以在需要的地方定义并使用。Lambda表达式可以以捕获列表、参数列表和函数体构成。
下面是Lambda表达式的基本语法:
```
[capture list] (parameter list) -> return type {
function body
}
```
其中,捕获列表是可选的,参数列表和函数体也是可选的。返回类型可以省略,编译器会自动推断。
Lambda表达式中的捕获列表可以用来捕获外部变量,例如:
```
int x = 10;
auto func = [x] () {
std::cout << "x = " << x << std::endl;
};
```
这里,我们使用捕获列表 `[x]` 来捕获变量 `x`。Lambda表达式定义了一个函数对象 `func`,它可以访问变量 `x` 的值。
Lambda表达式中的参数列表和普通函数的参数列表一样,例如:
```
auto func = [] (int x, int y) {
return x + y;
};
```
这里,我们定义了一个Lambda表达式 `func`,它接受两个整数参数 `x` 和 `y`,并返回它们的和。
Lambda表达式中的函数体可以是任何合法的C++语句序列,例如:
```
auto func = [] {
std::cout << "Hello, world!" << std::endl;
};
```
这里,我们定义了一个Lambda表达式 `func`,它输出一条消息。
Lambda表达式可以像函数一样调用,例如:
```
int result = func(2, 3);
```
这里,我们调用Lambda表达式 `func`,并将参数 `2` 和 `3` 传递给它。Lambda表达式返回它们的和,结果存储在变量 `result` 中。
Lambda表达式还可以作为函数参数传递,例如:
```
void process(int x, int y, std::function<int(int, int)> func) {
int result = func(x, y);
std::cout << "Result = " << result << std::endl;
}
process(2, 3, [] (int x, int y) {
return x + y;
});
```
这里,我们定义了一个函数 `process`,它接受两个整数参数 `x` 和 `y`,以及一个函数参数 `func`,并将 `x` 和 `y` 传递给 `func`。我们调用 `process` 函数时,使用了一个Lambda表达式作为 `func` 参数,该Lambda表达式将 `x` 和 `y` 相加,并返回结果。最终,`process` 函数将结果输出到控制台。
阅读全文