cpp的lambda表达式
在C++中,lambda表达式提供了一种方便的方式来定义匿名函数。Lambda可以用来创建简单的函数对象,常用于算法库中的函数参数,特别是在STL(Standard Template Library)中。
Lambda表达式的语法是这样的:
[ capture ] ( parameters ) -> return-type {
function-body
}
其中:
- capture:捕获列表,用于指定哪些变量从封闭的作用域中捕获以及如何捕获(值捕获、引用捕获、不捕获、隐式捕获)。例如,
[x, &y]
表示x
通过值捕获,而y
通过引用捕获。 - parameters:参数列表,与普通函数的参数列表类似。如果没有参数,可以省略或者写成空括号
()
。 - return-type:返回类型。自C++14起,如果lambda函数体只包含一个
return
语句,或者返回类型显而易见,则可以省略返回类型,编译器会进行自动推断。 - function-body:函数体,包含了lambda的执行语句。
下面是一些lambda表达式的示例:
示例 1:无参数,简单的打印
auto printHello = []() {
std::cout << "Hello, World!" << std::endl;
};
printHello(); // 调用lambda表达式
示例 2:使用参数和返回值
auto add = [](int x, int y) -> int {
return x + y;
};
std::cout << add(5, 3) << std::endl; // 输出8
示例 3:值捕获外部变量
int z = 4;
auto addZ = [z](int x) -> int {
return x + z; // z通过值捕获进来
};
std::cout << addZ(3) << std::endl; // 输出7
示例 4:引用捕获外部变量
int w = 4;
auto modifyW = [&w](int x) {
w = x; // w通过引用捕获,可以修改其值
};
modifyW(5);
std::cout << w << std::endl; // 输出5
Lambda表达式是C++11及以后版本中的一个强大特性,它大大简化了代码的编写,尤其是在需要使用临时函数对象的场合。