C++11中的lambda表达式是什么?如何使用它们?
C++11中引入的lambda表达式是一种方便的编写匿名函数对象的方式。它们常用于短小的函数体,特别是在需要作为参数传递给算法或其他函数的情况下。
基本语法:
[捕获列表](参数列表) -> 返回类型 {
函数体
}
- 捕获列表: 定义了lambda表达式可以访问的外部变量,可以是值捕获、引用捕获或隐式捕获。
- 参数列表: 类似于普通函数的参数列表,用于定义传递给lambda表达式的参数。
- 返回类型: 可以显式指定lambda表达式的返回类型,也可以让编译器自动推断。
- 函数体: 定义了lambda表达式的执行逻辑。
使用示例:
- 基本使用:
auto add = [](int a, int b) -> int { return a + b; }; int sum = add(3, 5); // 调用lambda表达式
- 作为函数参数:
std::vector<int> vec = {1, 2, 3, 4, 5}; std::sort(vec.begin(), vec.end(), [](int a, int b) { return a > b; // 降序排序 });
- 捕获外部变量:
- 值捕获:
[=]
捕获所有外部变量的副本。 - 引用捕获:
[&]
捕获所有外部变量的引用。 -
混合捕获:
[x, &y]
捕获变量x
的副本和变量y
的引用。int x = 10; auto check = [x](int val) { return val > x; }; bool result = check(15); // true
总结:
Lambda表达式是C++11中的一个强大特性,它提供了一种简洁的方式来定义匿名函数对象,非常适合用于STL算法、事件处理、回调函数等场景。通过合理使用lambda表达式,可以使代码更加简洁易读。