匿名函数(Anonymous Function)是没有名称的函数。在 C++ 中,匿名函数通常通过 Lambda 表达式 来实现。它是定义并使用函数的一简洁方式,尤其是在需要临时函数时非常有用。
匿名函数的特点:
- 没有名称:和传统函数不同,匿名函数没有函数名。
- 即用即弃:通常在定义的地方被调用,不需要单独命名和定义函数。
- 可以捕捉外部变量:在 C++ 中,匿名函数(通常是 Lambda 表达式)可以通过捕获外部变量(按值或按引用)来使用它们。
C++中的匿名函数(Lambda表达式)
[捕获列表] (参数列表) -> 返回类型 { 函数体 }
示例1:一个简单的匿名函数(Lambda 表达式)
#include <iostream>
using namespace std;
int main() {
// 定义一个匿名函数并立即调用它
[]() {
cout << "This is an anonymous function!" << endl;
}(); // 调用匿名函数
return 0;
}
解释:
- [] 是捕获列表,表示不捕获任何外部变量。
- () 是参数列表,表示这个匿名函数没有参数。
- {} 是函数体,包含匿名函数的代码。
示例2:带参数和返回值的匿名函数
#include <iostream>
using namespace std;
int main() {
// 定义并调用一个带参数和返回值的匿名函数
auto add = [](int a, int b) -> int {
return a + b;
};
cout << "The sum of 3 and 5 is: " << add(3, 5) << endl;
return 0;
}
解释:
- auto add = []:定义一个 Lambda 表达式,并通过 auto 将其赋值给变量 add,使得我们可以通过 add 来调用它。
- (int a, int b):匿名函数有两个参数 a 和 b。
- -> int:返回类型是 int,表示这个匿名函数会返回一个整数。
- { return a + b; }:函数体,实现了两个整数相加的功能。
示例3:匿名函数按值捕获外部变量
#include <iostream>
using namespace std;
int main() {
int x = 10;
int y = 20;
// 捕获外部变量并进行操作
auto add = [x, y]() {
return x + y;
};
cout << "The sum of x and y is: " << add() << endl;
return 0;
}
解释:
- [x, y] 是捕获列表,表示 Lambda 函数捕获外部变量 x 和 y 的值。
- 这里没有参数列表,直接在函数体中使用捕获的外部变量 x 和 y 来计算它们的和。
示例4:按引用捕获外部变量
#include <iostream>
using namespace std;
int main() {
int x = 10;
// 按引用捕获外部变量并修改它
auto increment = [&x]() {
x++; // 修改 x 的值
};
increment(); // 调用匿名函数修改 x 的值
cout << "x after increment: " << x << endl; // 输出:x after increment: 11
return 0;
}
解释:
- [&x] 表示按引用捕获外部变量 x,这意味着在 Lambda 函数内部,我们可以直接修改 x 的值。
- 调用 increment() 后,x 的值变为 11。