云计算百科
云计算领域专业知识百科平台

C++ Lambda表达式深入全解析,面试必考!

C++ Lambda表达式深入全解析,面试必考!

Lambda是C++11引入的匿名函数特性,现代C++编程必备技能。本文从基础到高级,帮你彻底掌握Lambda。

一、Lambda基础语法

1.1 基本形式

// 完整语法
[capturelist](parameters) mutable -> returntype {

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(),

赞(0)
未经允许不得转载:网硕互联帮助中心 » C++ Lambda表达式深入全解析,面试必考!
分享到: 更多 (0)

评论 抢沙发

评论前必须登录!