C++11 lambda 表达式解析

AMD显卡跑Ollama大模型?手把手教你搞定Windows下GPU识别与加速(以RX 9600XT为例) 本文详细指导如何在Windows系统下使用AMD显卡(如RX 9600XT)运行Ollama大模型,解决GPU识别与加速问题。通过获取非官方Ollama版本、替换ROCm库文件等步骤,实现高效的GPU加速推理,提升大语言模型的运行效率。 阅读详情

C++11 新增了很多特性,lambda 表达式是其中之一,如果你想了解的 C++11 完整特性,建议去这里,这里,这里,还有这里看看。本文作为 5 月的最后一篇博客,将介绍 C++11 的 lambda 表达式。

很多语言都提供了 lambda 表达式,如 Python,Java 8。lambda 表达式可以方便地构造匿名函数,如果你的代码里面存在大量的小函数,而这些函数一般只被调用一次,那么不妨将他们重构成 lambda 表达式。

C++11 的 lambda 表达式规范如下:

[ capture ] ( params ) mutable exception attribute -> ret { body }(1)  
[ capture ] ( params ) -> ret { body }(2)  
[ capture ] ( params ) { body }(3)  
[ capture ] { body }(4)  

其中

  • (1) 是完整的 lambda 表达式形式,
  • (2) const 类型的 lambda 表达式,该类型的表达式不能改捕获("capture")列表中的值。
  • (3)省略了返回值类型的 lambda 表达式,但是该 lambda 表达式的返回类型可以按照下列规则推演出来:
    • 如果 lambda 代码块中包含了 return 语句,则该 lambda 表达式的返回类型由 return 语句的返回类型确定。
    • 如果没有 return 语句,则类似 void f(...) 函数。
  • 省略了参数列表,类似于无参函数 f()。

mutable 修饰符说明 lambda 表达式体内的代码可以修改被捕获的变量,并且可以访问被捕获对象的 non-const 方法。

exception 说明 lambda 表达式是否抛出异常(noexcept),以及抛出何种异常,类似于void f() throw(X, Y)。

attribute 用来声明属性。

另外,capture 指定了在可见域范围内 lambda 表达式的代码内可见得外部变量的列表,具体解释如下:

  • [a,&b] a变量以值的方式呗捕获,b以引用的方式被捕获。
  • [this] 以值的方式捕获 this 指针。
  • [&] 以引用的方式捕获所有的外部自动变量。
  • [=] 以值的方式捕获所有的外部自动变量。
  • [] 不捕获外部的任何变量。

此外,params 指定 lambda 表达式的参数。

一个具体的 C++11 lambda 表达式例子:

#include <vector>
#include <iostream>
#include <algorithm>
#include <functional>
 
int main()
{
    std::vector<int> c { 1,2,3,4,5,6,7 };
    int x = 5;
    c.erase(std::remove_if(c.begin(), c.end(), [x](int n) { return n < x; } ), c.end());
 
    std::cout << "c: ";
    for (auto i: c) {
        std::cout << i << ' ';
    }
    std::cout << '\n';
 
    // the type of a closure cannot be named, but can be inferred with auto
    auto func1 = [](int i) { return i+4; };
    std::cout << "func1: " << func1(6) << '\n'; 
 
    // like all callable objects, closures can be captured in std::function
    // (this may incur unnecessary overhead)
    std::function<int(int)> func2 = [](int i) { return i+4; };
    std::cout << "func2: " << func2(6) << '\n'; 
}



【推荐100个unity插件之24】实现2d交互式草树叶和随风飘动的效果——pixelgraphics插件 【推荐100个unity插件之23】实现2d交互式草树叶和随风飘动的效果——pixelgraphics插件 阅读详情

相关推荐

高速DAC时钟与配置实战:DAC5681Z硬件设计与寄存器编程详解

在高速数据转换系统中,时钟信号是决定系统性能的核心要素,其稳定性和纯净度直接影响数模转换器(DAC)的输出频谱纯度与动态范围。时钟电路的设计原理涉及信号完整性、阻抗匹配与直流偏置,而内部锁相环(PLL)和延迟锁相环(DLL)的配置则是实现精确时序控制的关键技术。这些技术的价值在于,它们共同保障了高速通信、雷达和任意波形生成等应用对信号实时性与精度的严苛要求。本文聚焦于德州仪器(TI)的DAC5681Z,深入解析其外部时钟输入电路的硬件设计要点,包括端接电阻的计算与选型,并详细拆解通过串行外设接口(SPI)对

weixin_30342363的博客 186

C++11 新特性

C++11 lambda 表达式解析 C++11 新增了很多特性,lambda 表达式是其中之一,如果你想了解的 C++11 完整特性,建议去这里,这里,这里,还有这里看看。本文作为 5 月的最后一篇博客,将介绍 C++11 的 lambda 表达式。 很多语言都提供了 lambda 表达式,如 Python,Java 8。lambda 表达式可以方便地构造匿名

liying426的专栏 758

vfsglobal预约系统登录问题全解析(by quqi99)

本文全面解析VFS Global预约系统登录常见问题,包括IP限制、验证码验证失败及账号自动删除等。提供详细的解决方案,如DNS配置、浏览器设置及邮箱选择建议,帮助用户顺利完成签证预约。特别针对中国用户遇到的IP限制问题,给出了实用技巧。

gamma的博客 1335

lambda expression capture list demo

#include using namespace std; int main() { int n = 10; auto f = [n](int v){return v+n;}; cout << f(8) << endl; return 0; }

\s 635

OpenHarmony-AI调研

基于OpenHarmony-5.0.0版本以及laval社区等网络资料调研当前OH上的AI发展情况。

qqq1112345的博客 1367

完整IC设计流程解析&Makefile学习

本文介绍了decorder38项目的文件结构、自动化综合流程和Makefile使用方法。项目包含RTL到GDSII全流程文件,重点关注syn目录中的综合脚本。通过make dc命令运行综合流程,生成网表、约束和时序文件。关键报告如qor.rpt、area.rpt和min_vio.rpt用于分析综合质量、面积和时序。Makefile部分解释了其基本语法、IC设计中的典型结构,包括目标定义、命令执行和特殊声明,强调了其在自动化构建和依赖管理中的重要性。

m0_63352623的博客 855

leetcode 17.电话号码的数字组合

leetcode 17

weixin_43343408的博客 449

YOLOv11改进策略【Neck】| PRCV 2023,SBA(Selective Boundary Aggregation):特征融合模块,描绘物体轮廓重新校准物体位置,解决边界模糊问题

SBA 模块在医疗图像分割中具有重要作用,其设计出发点是解决图像中物体边界模糊以及融合特征时的冗余和不一致问题。

Limiiiing的博客 1942

Line 21: Char 30: error: expected variable name or ‘this‘ in lambda capture list

]:在Lambda的方括号[ ]中命名局部变量称为捕获变量(capturing the variable),若在”[]“中没有指定变量,则在lambda表达式中不能使用。lambda捕获变量的方式是值传递的方式。

qq_42049394的博客 2739

专为AI打造的浏览器:内存占用仅为Chrome的1/9、比Chrome快11倍(Docker部署教程,支持飞牛nas等服务器部署)

🚀 专为AI打造的无头浏览器来了! 用Zig从零构建,内存仅Chrome的1/9,速度快11倍,原生CDP协议支持Docker部署,适合爬虫、自动化测试和AI代理应用。✨

XiaoqiangClub的博客 730

《网络安全自学教程》- Windows安全机制:安全标识符,身份鉴别和访问控制

这篇文章详细介绍Windows和Linux如何标识用户,如何根据标识验证用户身份,如何根据用户身份做访问控制。

wangyuxiang946的博客 1万+

C++11 lambda表达式 详解

如下图,lambda表达式由下面几个部分构成: C++11 的 lambda 表达式规范如下: [ capture ] ( params ) mutable exception attribute -> ret { body } 是完整的 lambda 表达式形式 [ capture ] ( params ) -> ret { body } const 类型的 lambda 表达式,该类型的表

阳光柠檬_的技术笔记 4589

航空电子系统标准全景图:ARP4754A、ARP4761、DO-178C、DO-254 的协同作用

通过 ARP4754A、ARP4761、DO-178C 和 DO-254 的相互配合,确保航空电子系统的安全性和功能性在开发过程中得到充分保障。每一个文件在不同层面发挥作用,共同构成了一个完整的、系统的开发和验证框架,确保航空电子设备达到适航要求。这些标准不仅帮助开发人员有条理地开发复杂的航空系统,还确保所有系统组件(软件和硬件)在整个生命周期内都能满足最严格的安全和可靠性要求。

qq_41854911的博客 1812

深入 C++11:移动语义、Lambda表达式与新特性全面解析

探讨C++11及以上版本的新特性,包括移动语义、Lambda表达式等。

酷酷的崽的博客 2111

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

C++11 Lambda表达式深度解析:匿名函数的革命性进化

C++11 Lambda表达式核心解析: Lambda是C++11引入的匿名函数机制,语法为捕捉列表->返回类型{函数体}。

先做,然后做对,最后做得更好。学习就是为了自由呀,当你学会了怎么学习,想要学什么就学什么,需要什么就学什么,你就自由了。 1198

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

C++11/14 lambda表达式使用及解析(二)

引言 很久之前总结过一篇C++11/14 lambda表达式使用及解析,其大体介绍了C++11/14中lambda表达式的基本使用,关于其他高级特性/使用等均未涉及;因此本文继该文章,进一步总结lambda表达时的高级特性(包括基本属性,细节)和使用。 由于目前C++20已经发布,因此,计划总结成如下系列: C++11/14 lambda表达式使用及解析(二)主要总结C++11中的lambda特性及使用。 C++11/14 lambda表达式使用及解析(三)主要总结C++14中的lambda特性及使

qls315的博客 1376

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

【C++11】lambda表达式保姆级详解(深度解析,小白一看就会!!)

​Lambda表达式:是C++11引入的一种函数对象,可以方便地创建匿名函数。与传统的函数不同,Lambda表达式可以在定义时直接嵌入代码,无需单独定义函数名称、参数和返回类型等信息。Lambda表达式通常用于需要定义一些简单的回调函数或者函数对象。优点:简洁、效率高、更加灵活。本文主要介绍Lambda的工作原理以及使用方法。

weixin_45031801的博客 8745

[C++11] Lambda表达式完整解析

说明:C++11中的Lambda表达式是一种允许创建匿名函数对象的语法结构。Lambda表达式可以捕获作用域中的变量,并且可以像普通函数一样被调用。它们是C++11标准中引入的一个重要特性,旨在提供一种方便的方式来定义内联的小型函数,特别适用于编写回调函数、线程任务、以及与STL算法结合使用的场景。在使用Lambda表达式前我们先了解下为什么引入Lambda表达式。

wangdsh的博客 1133

【C++:C++11】C++11新特性深度解析:从类新功能、Lambda表达式到包装器实战

本文深入探讨了C++11在类功能、lambda表达式和包装器方面的重要改进。主要内容包括:1. 类新功能:新增默认移动构造/赋值,支持default/delete控制默认函数生成,final/override关键字优化继承体系;2. lambda表达式:详解语法结构、捕捉列表规则及底层仿函数原理,展示其替代仿函数的优势;3. 包装器:function统一可调用对象类型,bind实现参数适配,结合实战案例演示银行复利计算等应用。文章通过代码示例和避坑指南,帮助开发者掌握现代C++的核心特性

2501_91275995的博客 752

【C++11】Lambda表达式深度解析:从语法到实践

本文系统性地探讨C++11引入的Lambda表达式,从语法结构、捕获机制到实际应用场景进行全面分析。通过对比传统仿函数,深入解析Lambda表达式在简化代码、提升可读性方面的优势,并结合具体示例展示其在算法、并发编程等领域的应用价值。

2403_88316985的博客 742
上一篇: C++实现委托机制之完整代码实现(二)
下一篇: C++教程之lambda表达式
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值