Lambda 表达式是 C++11 引入的一种非常方便和强大的功能,它允许你创建简洁、匿名的函数对象。在许多情况下,Lambda 表达式可以使代码更简洁、易读。接下来,我会详细介绍 C++ Lambda 表达式的基本概念、语法以及一些使用场景。
-
Lambda 表达式基本概念
Lambda 表达式是一个匿名的内联函数,它可以捕获外部作用域中的变量并在其内部使用。Lambda 表达式的结果是一个可调用的函数对象,你可以将其赋值给一个变量,或者直接调用它。 -
Lambda 表达式语法
Lambda 表达式的基本语法如下:
[capture](parameters) -> return_type { body }
capture:捕获列表,用于捕获外部作用域中的变量。
parameters:参数列表,和普通函数的参数列表类似。
return_type:返回类型,可以省略,编译器会根据函数体的内容自动推导。
body:函数体。
- 捕获列表
捕获列表用于指定 Lambda 表达式可以访问的外部作用域中的变量。捕获列表可以有以下几种形式:
[=]:以值捕获所有外部作用域的变量。
[&]:以引用捕获所有外部作用域的变量。
[x]:以值捕获变量 x。
[&x]:以引用捕获变量 x。
[=, &x]:以值捕获所有变量,但是以引用捕获变量 x。
[&, x]:以引用捕获所有变量,但是以值捕获变量 x。
- 示例
以下是一些使用 Lambda 表达式的简单示例:
例1:一个简单的 Lambda 表达式,没有参数、捕获和返回值。
#include <iostream>
int main() {
auto hello = [] { std::cout << "Hello, Lambda!" << std::endl; };
hello(); // 输出:Hello, Lambda!
return 0;
}
例2:一个带参数的 Lambda 表达式,计算两个整数的和。
#include <iostream>
int main() {
auto sum = [](int a, int b) { return a + b; };
std::cout << "3 + 4 = " << sum(3, 4) << std::endl; // 输出:3 + 4 = 7
return 0;
}
例3:一个捕获外部变量的 Lambda 表达式,计算平方。
#include <iostream>
int main() {
int x = 3;
auto square = [x] { return x * x; };
std::cout << "x * x = " << square() << std::endl; // 输出:x * x = 9
return 0;
}
- 使用场景
Lambda 表达式在很多场景下都非常有用,例如:
作为参数传递给其他函数,如 std::sort, std::find_if 等。
简化一些简单的函数定义,使代码更简洁。
用于创建自定义的比较函数或谓词函数。