Lambda表达式主要怎么用
时间: 2023-08-26 20:04:12 浏览: 162
Lambda表达式是一种匿名函数,可以在需要函数对象的地方使用。它的主要用途是简化代码,特别是在需要传递函数作为参数或定义一些简单的函数时。
Lambda表达式的基本语法如下:
```cpp
[capture list](parameters) -> return_type {
// 函数体
}
```
- `capture list`:捕获列表,用于在Lambda表达式中访问外部变量。可以省略,或者使用`[]`表示不捕获任何变量,使用`[&]`表示以引用方式捕获所有外部变量,使用`[=]`表示以值拷贝方式捕获所有外部变量。
- `parameters`:参数列表,与普通的函数定义一样,可以省略或为空。
- `return_type`:返回类型,可以省略,编译器可以根据上下文自动推导出返回类型。
- `{}`:函数体,与普通的函数定义一样。
下面是一些Lambda表达式的用例:
1. Lambda表达式作为函数对象传递:
```cpp
std::vector<int> nums = {1, 2, 3, 4, 5};
std::for_each(nums.begin(), nums.end(), [](int num) {
std::cout << num << " ";
});
```
2. Lambda表达式作为回调函数:
```cpp
QPushButton* button = new QPushButton("Click me");
QObject::connect(button, &QPushButton::clicked, [](bool checked) {
if (checked) {
std::cout << "Button clicked!" << std::endl;
}
});
```
3. Lambda表达式排序:
```cpp
std::vector<int> nums = {5, 2, 3, 1, 4};
std::sort(nums.begin(), nums.end(), [](int a, int b) {
return a < b;
});
```
需要注意的是,Lambda表达式可以访问外部作用域的变量,但是默认情况下是以值拷贝方式捕获的。如果需要以引用方式捕获变量,可以使用`[&]`或指定具体的变量名进行引用捕获。
Lambda表达式还有其他一些特性和用法,例如可以定义可调用对象,可以使用捕获列表进行变量的保护等。具体的使用方法可以根据需求和语境进行学习和实践。
阅读全文