【C++11】lambda表达式详解
发布人:shili8
发布时间:2025-01-18 04:37
阅读次数:0
**C++11 Lambda 表达式详解**
Lambda 表达式是 C++11 中引入的一种匿名函数类型,它允许在程序中定义一个临时的、没有名字的函数。这种功能使得编程更加灵活和高效。
###什么是Lambda表达式Lambda 表达式是一种特殊的函数对象,它可以捕捉到其所在作用域中的变量,并且可以使用这些变量来进行计算或操作。在 C++11 中,lambda 表达式被定义为:
cpp[捕捉列表](参数列表) -> 返回类型 { 函数体 }
其中:
* `[捕捉列表]` 是一个可选项,用于指定 lambda 表达式需要捕捉的变量。
* `(参数列表)` 是一个必需项,用于指定 lambda 表达式的参数。
* `-> 返回类型` 是一个可选项,用于指定 lambda 表达式的返回类型。
* `{ 函数体 }` 是一个必需项,用于指定 lambda 表达式的函数体。
### Lambda表达式的捕捉列表Lambda 表达式的捕捉列表是用来捕捉其所在作用域中的变量的。捕捉列表可以包含多个变量,每个变量都有一个特定的捕捉方式。捕捉方式有以下几种:
* `&`:捕捉变量的引用。
* `$`:捕捉变量的值(默认)。
* `[=]`:捕捉所有外部变量的值。
* `[&]`:捕捉所有外部变量的引用。
### Lambda表达式的参数列表Lambda 表达式的参数列表是用来指定 lambda 表达式的参数的。参数列表可以包含多个参数,每个参数都有一个特定的类型和名称。
### Lambda表达式的返回类型Lambda 表达式的返回类型是用来指定 lambda 表达式的返回类型的。如果不指定返回类型,lambda 表达式将会隐式地返回 `void` 类型。
### Lambda表达式的函数体Lambda 表达式的函数体是用来指定 lambda 表达式的计算或操作逻辑的。函数体可以包含多个语句,每个语句都有一个特定的作用。
###例子下面是一个简单的例子:
cpp#include <iostream> #include <vector> int main() { std::vector<int> numbers = {1,2,3,4,5}; // 使用lambda表达式求和 int sum =0; for (auto num : numbers) { sum += num; } // 使用lambda表达式求平均值 double average =0.0; for (auto num : numbers) { average += num; } average /= numbers.size(); std::cout << "Sum: " << sum << std::endl; std::cout << "Average: " << average << std::endl; return0; }
在这个例子中,我们使用 lambda 表达式来求和和平均值。lambda 表达式捕捉了 `numbers` 变量的引用,并使用它来进行计算。
### 总结Lambda 表达式是 C++11 中引入的一种匿名函数类型,它允许在程序中定义一个临时的、没有名字的函数。这种功能使得编程更加灵活和高效。lambda 表达式可以捕捉到其所在作用域中的变量,并且可以使用这些变量来进行计算或操作。在这个教程中,我们学习了 lambda 表达式的基本概念,包括捕捉列表、参数列表、返回类型和函数体。我们还看到了一个例子,展示了如何使用 lambda 表达式来求和和平均值。