news 2026/6/6 10:47:20

C++ Lambda表达式使用

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
C++ Lambda表达式使用

Lambda 表达式基本语法

C++ Lambda 表达式的基本结构如下:

[capture](parameters) -> return_type { body }
  • [capture]:捕获列表,指定外部变量的捕获方式(值捕获、引用捕获等)。
  • (parameters):参数列表,与普通函数参数一致(C++14 支持auto泛型参数)。
  • -> return_type:可选的返回类型声明(省略时由编译器自动推导)。
  • { body }:函数体,实现具体逻辑。

最小 Lambda 示例

auto print = [] { std::cout << "Hello, Lambda!"; }; print(); // 输出:Hello, Lambda!

捕获列表的用法

捕获列表控制 Lambda 访问外部变量的方式:

值捕获(复制变量):

int x = 10; auto lambda = [x] { return x + 1; }; // 捕获 x 的副本

引用捕获(直接操作原变量):

int y = 20; auto lambda = [&y] { y += 5; }; // 修改原变量 y lambda(); // y 变为 25

混合捕获

int a = 1, b = 2; auto lambda = [a, &b] { return a + b; }; // a 值捕获,b 引用捕获

隐式捕获

  • [=]:以值捕获所有外部变量。
  • [&]:以引用捕获所有外部变量。
  • [=, &x]:默认值捕获,仅x引用捕获。

与 STL 算法结合

Lambda 常用于简化 STL 算法的调用,例如std::sortstd::for_each

std::vector<int> nums = {3, 1, 4, 1, 5}; std::sort(nums.begin(), nums.end(), [](int a, int b) { return a > b; }); // nums 变为 {5, 4, 3, 1, 1}

生命周期与悬垂引用风险

若 Lambda 捕获引用且原始变量已销毁,后续调用会引发未定义行为:

std::function<int()> createLambda() { int z = 30; return [&z] { return z; }; // 危险:z 是局部变量 } auto f = createLambda(); f(); // 错误:z 已销毁

性能优化建议

  • 优先使用auto存储 Lambda:避免std::function的间接调用开销。
  • 无捕获 Lambda 可转换为函数指针:适用于 C 接口回调。
  • 避免过度捕获:仅捕获必要变量以减少对象大小。

高级特性(C++14/17)

泛型 Lambda(C++14):

auto adder = [](auto a, auto b) { return a + b; }; adder(3, 4.5); // 返回 7.5

初始化捕获(C++14):

int x = 10; auto lambda = [y = x + 1] { return y; }; // y 初始化为 x + 1

constexprLambda(C++17):

constexpr auto square = [](int n) { return n * n; }; static_assert(square(5) == 25); // 编译期计算


版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/6 10:46:10

口碑好的ERP软件

核心结论与综合排名经过对市面上主流通用的和专业深耕的进销存软件进行横向测评与行业落地案例交叉比对&#xff0c;我们为快消经销商&#xff08;特别是食品、饮料、冻品、零食、日化行业&#xff09;整理出以下综合排名与选型结论&#xff1a;第一梯队&#xff08;全链路渠道…

作者头像 李华
网站建设 2026/6/6 10:44:45

震惊!专业又口碑好的喷绘布,究竟哪家强?

在广告物料领域&#xff0c;喷绘布的质量和服务至关重要。面对市场上众多的选择&#xff0c;客户往往会陷入迷茫&#xff0c;究竟哪家的喷绘布既专业又有好口碑呢&#xff1f;下面为您深度剖析。行业痛点凸显当前&#xff0c;客户在选择喷绘布供应商时面临诸多困扰。许多工厂存…

作者头像 李华
网站建设 2026/6/6 10:44:27

用七段式Prompt让ChatGPT成为本地化旅行规划师

1. 项目概述&#xff1a;把ChatGPT变成你随叫随到的本地旅行管家我做旅行规划类内容已经八年了&#xff0c;从最早手绘路线图、查纸质地图册&#xff0c;到后来用Google Maps反复拖拽测距离&#xff0c;再到如今每天用AI工具帮上百位读者定制行程——这个转变不是靠“技术升级”…

作者头像 李华
网站建设 2026/6/6 10:44:26

5分钟掌握Godot游戏资源解包:免费PCK文件提取终极指南

5分钟掌握Godot游戏资源解包&#xff1a;免费PCK文件提取终极指南 【免费下载链接】godot-unpacker godot .pck unpacker 项目地址: https://gitcode.com/gh_mirrors/go/godot-unpacker 你是否曾经遇到过想要查看Godot引擎制作的游戏资源&#xff0c;却被神秘的PCK文件格…

作者头像 李华
网站建设 2026/6/6 10:44:08

从投稿到接收:我的Elsevier KBS期刊LaTeX排版实战心得与细节调整

从投稿到接收&#xff1a;我的Elsevier KBS期刊LaTeX排版实战心得与细节调整 第一次向Elsevier旗下期刊投稿时&#xff0c;我像大多数研究者一样&#xff0c;以为只要内容过硬&#xff0c;格式问题都是小细节。直到收到编辑部的格式返工邮件&#xff0c;才发现那些隐藏在官方文…

作者头像 李华