C++探索:一句话说清楚什么是Lambda表达式

一、 什么是Lambda表达式

        Lambda表达式,也称为匿名函数,它的作用,它允许你在需要函数的地方内联地定义函数,而 无需单独命名函数,即可以充当普通函数使用。

什么叫做“内联”:简单解释,就是可以减少函数调用开销,适用于小型函数。

而什么是内联函数?可以看我的另一篇文章:

https://blog.ZEEKLOG.net/lonelymonk/article/details/158154585?sharetype=blogdetail&sharerId=158154585&sharerefer=PC&sharesource=lonelymonk&spm=1011.2480.3001.8118

        先简单地了解Lambda表达式的基本形式以及其各部分的含义

[capture clause](parameters) -> return_type { // 函数体 // 可以使用捕获列表中的变量 return expression; // 可选的返回语句 }

        1.捕获列表 【capture clause】

        用于捕获Lambda外部的变量,可以在表达式内部访问这些被捕获的变量;捕获列表可以为空,也可以包含变量列表【value1,value2,value3】

        2.参数列表(parameters)

        与普通函数的参数列表类似,可以为空或包含参数列表 (param1,

param2, ...) 。

        3.返回类型(return_type)

        用于指定Lambda表达式可以显式地指定其返回类型,同时,也可以通过“auto”关键字,来自动推断返回类型。如果表达式只有一条返回语句,可以省略返回类型。

        4.函数体(body)

        :包含需要执行的代码。

二、应用范围

        在C++ 中,Lambda表达式主要有如下运用

        1.直接替代函数的作用

         Lambda 表达式最简单的案例是在需要一个小型函数或临时函数时直接使用它。以下以计算两数之和的案例来解释:        常规函数:

#include <iostream> using namespace std; int get_sum(int a, int b) { return a+b;//构建函数,实现两数之和相加 } int main() { //初始化变量 int a = 0; int b = 0; int sum = 0; cout<<"请输入两个值:"<<endl; cin >> a ; cin >> b; sum = get_sum(a,b);//调用函数 cout<<"两个数之和是:"<< sum << endl; return 0; } 

        使用Lambda表达式:

#include <iostream> using namespace std; int main() { //初始化变量 int a = 0; int b = 0; cout<<"请输入两个值:"<<endl; cin >> a ; cin >> b; auto add =[](int c,int d){ return c+d;//Lambda表达式 }; int sum = add(a , b); cout<<"两个数之和是:"<< sum << endl; return 0; } 

        2.在回调函数中使用

        常规使用:

#include <iostream> using namespace std; bool compare(int a ,int b){ return a > b;//返回a是否大于b的bool类型 } int get_max(int a, int b, bool(*point)(int ,int)){ if (point(a,b)){ return a; } else{ return b; } } int main() { //初始化变量 int a = 0; int b = 0; cout<<"请输入两个值:"<<endl; cin >> a ; cin >> b; int max = get_max(a,b,compare);//变量1,变量2, 函数指针 cout<<"两个数中较大的一个数是:"<< max << endl; return 0; } 

        使用Lambda表达式

#include <iostream> using namespace std; int get_max(int a, int b, bool(*point)(int ,int)){ if (point(a,b)){ return a; } else{ return b; } } int main() { //初始化变量 int a = 0; int b = 0; cout<<"请输入两个值:"<<endl; cin >> a ; cin >> b; int max = get_max(a,b,[](int a ,int b)->bool{ return a > b;});//变量1,变量2,Lambda表达式,直接传入执行数值比较的函数,而非函数指针 cout<<"两个数中较大的一个数是:"<< max << endl; return 0; } 

        3.带参数捕获的Lambda表达式

                (1)按值部分参数捕获

                   捕获到表达式中的变量,不需要手动传入参数,类似于复制粘贴,但是并不可以修改值,可读不可写。

#include <iostream> using namespace std; int main() { //初始化变量 int a = 10; int b = 20; int c = 30; auto add =[a,b]()->int{ return a+b; }; int sum = add(); cout<<"两数字之和:"<< sum << endl; return 0; } 

        (2)按值全局捕获

                括号中的“=”代表从表达式外获取全部变量值,传入表达式中;同样不可以修改值的大小,可读不可写

#include <iostream> using namespace std; int main() { //初始化变量 int a = 10; int b = 20; int c = 30; auto add =[=]()->int{ return a+b+c; }; int sum = add(); cout<<"数字之和:"<< sum << endl; return 0; } 

        (3)引用全局捕获

        括号中通过 “&”来引用的捕获外部变量的地址,类似于指针传入参数,因此可以修改参数的值,可读可写

#include <iostream> using namespace std; int main() { //初始化变量 int a = 10; int b = 20; int c = 30; auto add =[&]()->int{ a = 20; return a+b+c; }; int sum = add(); cout<<"数字之和:"<< sum << endl; return 0; } 

Read more

从零开始微调Qwen视觉模型|结合LLaMA-Factory与Qwen3-VL-WEBUI实战

从零开始微调Qwen视觉模型|结合LLaMA-Factory与Qwen3-VL-WEBUI实战 一、前言:为什么需要微调Qwen3-VL? 随着多模态大模型的快速发展,Qwen3-VL作为阿里云推出的最新一代视觉语言模型,凭借其强大的图文理解能力、长上下文支持(最高可达1M tokens)以及对视频、GUI操作等复杂任务的支持,正在成为企业级AI应用的重要基础设施。然而,预训练模型虽然具备通用能力,但在特定业务场景下——如识别公司内部文档格式、定制化图像标签生成或自动化表单填写——往往表现不足。 本文将带你从零开始完成一次完整的Qwen3-VL-4B-Instruct模型微调实践,使用开源工具 LLaMA-Factory 实现高效参数微调(LoRA),并借助 Qwen3-VL-WEBUI 镜像快速部署和验证效果。无论你是算法工程师还是AI产品经理,都能通过本教程掌握如何让大模型“学会”你的专属任务。 ✅ 核心价值: - 掌握基于LLaMA-Factory的视觉语言模型微调全流程 - 理解Qwen3-VL的关键架构升级与适配要点 - 获得可复用的数据准备、配置优化与问题排查经验

By Ne0inhk
NASA火星代码测试内幕:用AIGC模拟外星环境攻击

NASA火星代码测试内幕:用AIGC模拟外星环境攻击

火星任务软件测试的迫切需求 NASA的火星探测任务(如“毅力号”和未来载人计划)依赖于复杂的软件系统,这些系统必须抵御未知的外星环境威胁,包括辐射干扰、沙尘暴、黑客攻击等。传统测试方法难以模拟这些极端场景,因此NASA创新性地引入AIGC(人工智能生成内容)技术,生成动态、高保真的攻击模拟环境。本文从软件测试专业视角,揭秘这一内幕,分析其技术框架、测试流程和行业启示,助力测试从业者提升风险应对能力。 一、背景:火星软件测试的独特挑战 火星任务软件(如导航、通信和生命支持系统)面临三重挑战: 1. 环境不确定性:火星表面辐射强度是地球的100倍,沙尘暴可导致传感器失效(数据来源:NASA JPL报告,2025)。 2. 安全威胁:外星黑客攻击可能通过深空网络渗透,例如2024年模拟测试中发现的零日漏洞。 3. 测试局限性:地面实验室无法完全复制火星条件,传统脚本测试覆盖率不足。 AIGC的引入解决了这些痛点: * 定义:AIGC利用生成式AI(如GPT-4和GANs)自动创建攻击场景,包括恶意代码注入、

By Ne0inhk

在Windows11利用llama.cpp调用Qwen3.5量化模型测试

1.下载llama.cpp二进制文件 访问 https://github.com/ggml-org/llama.cpp/releases 或者 https://bgithub.xyz/ggml-org/llama.cpp/releases 选择适合自己平台的。我没有独立显卡,所以选择CPU版本 https://bgithub.xyz/ggml-org/llama.cpp/releases/download/b8192/llama-b8192-bin-win-cpu-x64.zip 解压到\d\llama8\目录。 2.下载量化模型 按照 章北海mlpy 公众号:Ai学习的老章~ID:mindszhang666 写的知乎文章Qwen3.5 0.8B/2B/

By Ne0inhk
【Linux学习笔记】git三板斧

【Linux学习笔记】git三板斧

🌟个人主页:努力学习的小汤   🌈专栏系列:linux 目录 ❄️前言: ☀️版本控制器git ☀️git简史 ☀️git三板斧 ⭐gitee创建仓库并克隆到本地 ⭐1. git add ⭐2. git commit ⭐3. git push ⭐4. 首次使用git ☀️git其他操作 ⭐git status ⭐git log ⭐git pull ☀️本章小结: 🌻共勉: ❄️前言:  上一篇博客我们学习了make和makefile自动化构建工具,今天我们来学习一下git的三板斧。 ☀️版本控制器git 为了我们方便管理不同版本的文件,就有了版本控制器; 所谓的版本控制器,就是能够了解到一个文件的历史记录(修改记录);简单来说就是记录每一次的改动和版本迭代的一个管理系统,同时也方了多人进行协作。 当前应用最广泛的版本控制器就是git,git可以控制电脑上所有格式的文件。 之前我们在windows下使用git来管理自己的本地文件,并上传至gitee; ☀️git简史 同生活中的许多伟大事物一样,Git 诞生于一个极

By Ne0inhk