C++ Lambda表达式深入全解析,面试必考!
Lambda是C++11引入的匿名函数特性,现代C++编程必备技能。本文从基础到高级,帮你彻底掌握Lambda。
一、Lambda基础语法
1.1 基本形式
// 完整语法
[capture–list](parameters) mutable -> return–type {
body }
// 最简形式
[]() {
};
// 实际使用
auto add = [](int a, int b) -> int {
return a + b;
};
std::cout << add(3, 4); // 输出: 7
1.2 各部分详解
// 1. 捕获列表 [capture-list]
// 2. 参数列表 (parameters) – 可选
// 3. mutable – 可选,允许修改按值捕获的变量
// 4. 返回类型 -> return-type – 可选,可自动推导
// 5. 函数体 { body }
// 省略返回类型(自动推导)
auto add = [](int a, int b) {
return a + b; // 返回类型推导为int
};
// 省略参数列表
auto greet = [] {
std::cout << \”Hello!\”;
};
二、捕获列表详解
2.1 捕获方式
int x = 10;
int y = 20;
// 1. 空捕获:不捕获任何
auto f1 = [] {
return 42; };
// 2. 按值捕获
auto f2 = [x] {
return x; }; // 捕获x的副本
// 3. 按引用捕获
auto f3 = [&x] {
x++; return x; }; // 捕获x的引用
// 4. 隐式按值捕获
auto f4 = [=] {
return x + y; }; // 捕获所有使用的变量
// 5. 隐式按引用捕获
auto f5 = [&] {
x++; y++; }; // 捕获所有使用的变量
// 6. 混合捕获
auto f6 = [=, &x] {
x++; return y; }; // 默认值捕获,x引用捕获
auto f7 = [&, x] {
x++; y++; }; // 默认引用捕获,x值捕获
2.2 捕获this指针
class Widget {
int value_ = 42;
public:
void doSomething() {
// 捕获this指针
auto f1 = [this] {
return value_; };
auto f2 = [*this] {
return value_; }; // C++17:捕获this的副本
// 在成员函数中使用Lambda
std::vector<int> vec = {
1, 2, 3};
std::for_each(vec.begin(), vec.end(),
网硕互联帮助中心







评论前必须登录!
注册