C++lambda表达式常见的几种写法
时间: 2024-08-15 15:09:36 浏览: 59
C++ 中的Lambda表达式写法
C++ lambda表达式有多种常见写法,根据需要捕获外部变量、参数列表以及返回类型的不同,可以分为简单形式和复杂形式。以下是三种常见写法:
1. **简单无参无返回值的形式**:
```cpp
auto square = []() { return x * x; }; // 如果x是自由变量
```
2. **带参数和返回值的形式**:
```cpp
auto addFive = [](int num) -> int { return num + 5; };
```
3. **捕获外部变量(by value)**:
```cpp
void outerFunction(int x) {
auto innerLambda = [x] { cout << "x is: " << x << endl; };
}
```
4. **捕获外部变量(引用)**:
```cpp
void outerFunction(int& x) {
auto innerLambda = [&x] { cout << "x is: " << x << endl; };
}
```
5. **捕获特定范围内的外部变量(按需捕获)**:
- `[]` 表示当前作用域(default捕获)
- `[=]` 或 `[capture(this)]` 表示所有外部变量(copy capture)
- `[&]` 表示所有外部变量作为引用(reference capture)
6. **多行Lambda表达式**:
可以通过`{}`包裹多条语句:
```cpp
auto complexLambda = [i](int j) {
int result = i * j;
if (result > 10) {
return result;
} else {
return 0;
}
};
```
记住,Lambda表达式的灵活性取决于你需要处理的情况,选择合适的捕获方式和参数列表可以使代码更简洁易懂。
阅读全文