c++ lambda表达式的使用方法
C++11引入了lambda表达式,它是一种轻量级的匿名函数,允许我们在需要函数的地方直接定义函数,而无需专门声明函数。lambda表达式的语法简洁,并且非常灵活,可以捕获外部变量,具有与普通函数相似的功能。
1. 基本语法
lambda表达式的基本语法如下:
[capture clause] (parameters) -> return_type { body }
capture clause
:捕获列表,用于捕获外部变量。parameters
:参数列表,与普通函数的参数列表类似。return_type
:返回类型,可以省略,编译器可以自动推导出来。body
:函数体,与普通函数的函数体类似。
2. 捕获列表
lambda表达式可以捕获外部变量,使得lambda函数能够访问这些外部变量。捕获列表有以下几种形式:
[]
:空捕获列表,不捕获任何外部变量。[var]
:捕获单个变量var。[=]
:以值捕获方式捕获所有外部变量。[&]
:以引用捕获方式捕获所有外部变量。[var1, var2]
:同时捕获多个变量。
3. 示例代码
#include <iostream>int main() {int x = 10;int y = 20;// Lambda表达式示例1:不捕获外部变量auto func1 = []() {std::cout << "Hello, Lambda!" << std::endl;};func1(); // 输出:Hello, Lambda!// Lambda表达式示例2:捕获外部变量x,以值捕获方式auto func2 = [x]() {std::cout << "x = " << x << std::endl;};func2(); // 输出:x = 10// Lambda表达式示例3:捕获外部变量x和y,以引用捕获方式auto func3 = [&x, &y]() {x++;y++;std::cout << "x = " << x << ", y = " << y << std::endl;};func3(); // 输出:x = 11, y = 21return 0;
}
在这个示例中,演示了三种不同的lambda表达式用法:
func1
不捕获任何外部变量,直接输出字符串。func2
以值捕获方式捕获外部变量x
,并输出其值。func3
以引用捕获方式捕获外部变量x
和y
,并修改它们的值。