当前位置: 首页> 汽车> 时评 > 专业网页制作哪家好_永久免费网站建立_宁波外贸网站推广优化_网络推广电话

专业网页制作哪家好_永久免费网站建立_宁波外贸网站推广优化_网络推广电话

时间:2025/7/10 17:11:34来源:https://blog.csdn.net/2302_79590880/article/details/147096964 浏览次数: 0次
专业网页制作哪家好_永久免费网站建立_宁波外贸网站推广优化_网络推广电话

前言

整理了一下C++中的Lambda表达式的用法。

内容对新手比较友好

一、什么是Lambda?

Lambda是C++11引入的匿名函数,用于快速定义临时使用的简单函数,特别适合配合sortfor_each等场景。

基础格式

auto 变量名 = [捕获列表](参数列表) { 函数体 };

最简示例

auto sayHello = []() { cout << "Hello World!"; 
};
sayHello(); // 输出Hello World!

二、快速入门三步走

1. 无参数的Lambda

// 定义
auto printStar = []() {cout << "*****" << endl;
};// 调用
printStar(); // 输出*****

2. 带参数的Lambda

// 比较两个数的大小
auto isBigger = [](int a, int b) {return a > b;
};cout << isBigger(5, 3); // 输出1 (true)

3. 使用外部变量(捕获列表)

int score = 85;// 捕获外部变量判断是否及格
auto checkPass = [score]() { // [ ] 内写要捕获的变量return score >= 60;
};cout << checkPass(); // 输出1

三、捕获列表的两种方式

1. 值捕获(复制值)

int x = 10;auto copyX = [x]() { // 复制x的值cout << x;       // 输出10(原x的副本)
};x = 20;              // 修改原变量
copyX();             // 仍然输出10

2. 引用捕获(操作原变量)

int y = 5;auto changeY = [&y]() { // 使用引用y += 10;
};changeY();
cout << y; // 输出15(原变量被修改)

四、修改捕获的值(mutable关键字)

值捕获的变量默认不可修改,添加mutable解除限制:

int count = 0;auto counter = [count]() mutable { // 允许修改副本count++;cout << count << " ";
};counter(); // 输出1(副本被修改)
counter(); // 输出2
cout << count; // 原变量仍为0

五、返回类型自动推导

大多数情况无需指定返回类型,编译器自动推导:

// 自动推导为int
auto add = [](int a, int b) { return a + b; 
};// 自动推导为double
auto divide = [](double a, double b) {return a / b;
};

特殊场景:多分支需显式声明返回类型

auto checkSign = [](int num) -> string { // 显式指定返回stringif(num > 0) return "正数";else return "非正数";
};

六、新手常见错误

1. 引用捕获局部变量

auto createBug() {int temp = 42;return [&temp]() { return temp; }; // temp即将销毁
} // ❌ 危险!temp已被释放auto func = createBug();
cout << func(); // 随机值(未定义行为)

解决方案:改用值捕获或延长变量生命周期

2. 忘记mutable

int a = 5;
auto lambda = [a]() { a++; // ❌ 编译错误!
};

解决方案:添加mutable

auto lambda = [a]() mutable { a++; // ✅ 
};
关键字:专业网页制作哪家好_永久免费网站建立_宁波外贸网站推广优化_网络推广电话

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

责任编辑: