lambda表达式是C++11引入的匿名函数机制,基本语法为[捕获列表](参数列表) mutable -> 返回类型 { 函数体 },常用于STL算法中简洁定义内联操作。

lambda表达式是C++11引入的一种简洁定义匿名函数的方式,适合在需要函数对象的场合快速编写内联函数。它的基本结构清晰,使用灵活,尤其常用于STL算法中作为谓词或操作函数。
lambda表达式的基本语法
lambda表达式的完整语法如下:
[捕获列表](参数列表) mutable -> 返回类型 { 函数体 }
其中各部分说明如下:
捕获列表 [ ]:决定如何从外部作用域获取变量,可以按值或引用捕获。 参数列表 ( ):和普通函数参数类似,可为空。 mutable(可选):允许修改按值捕获的变量。 返回类型(可选):若不指定,编译器自动推导。 函数体 { }:包含具体执行逻辑。
最简单的lambda示例:
立即学习“C++免费学习笔记(深入)”;
auto func = []() { return 42; };
std::cout
捕获列表的使用方式
捕获列表控制lambda如何访问外部变量,常见形式有:
[=]:按值捕获所有外部变量。 [&]:按引用捕获所有外部变量。 [x]:仅按值捕获变量x。 [&x]:仅按引用捕获变量x。 [this]:捕获当前对象的this指针。 [=, &x]:按值捕获所有,但x按引用捕获。
示例:使用捕获列表处理局部变量
int a = 10;
auto f1 = [a]() { std::cout a = 20;
f1(); // 输出 10,因为是按值捕获
auto f2 = [&a]() { std::cout a = 30;
f2(); // 输出 30,因为是按引用捕获
在STL算法中的实际应用
lambda常用于头文件中的函数,如sort、find_if、for_each等。
例如,对vector按降序排序:
std::vector nums = {5, 2, 8, 1};
std::sort(nums.begin(), nums.end(), [](int a, int b) {
return a > b;
});
再比如遍历并打印元素:
std::for_each(nums.begin(), nums.end(), [](int n) {
std::cout }); // 输出:8 5 2 1
返回类型与mutable关键字
大多数情况下,lambda的返回类型由return语句自动推导。但如果函数体包含多种返回路径,需显式指定返回类型。
auto divide = [](double a, double b) -> double {
if (b != 0) return a / b;
else return 0.0;
};
当使用按值捕获时,默认不能修改捕获的变量。加上mutable可解除这一限制:
int x = 1;
auto f = [x]() mutable {
x += 10;
std::cout };
f(); // 输出 11
std::cout
基本上就这些。lambda让代码更紧凑,减少额外函数声明,合理使用能显著提升可读性和开发效率。注意生命周期问题,尤其是引用捕获时避免悬空引用。
以上就是c++++中lambda表达式怎么用_lambda表达式使用方法详解的详细内容,更多请关注创想鸟其它相关文章!
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1477358.html
微信扫一扫
支付宝扫一扫