首页 > 后端开发 > C++ > 正文

C++ lambda表达式怎么用_C++匿名函数语法与捕获列表详解

裘德小鎮的故事
发布: 2025-12-15 14:59:41
原创
243人浏览过
lambda表达式是C++11引入的匿名函数特性,语法为[捕获列表](参数列表) mutable noexcept -> 返回类型 {函数体},其中捕获列表和函数体必选,其余可省略。常见形式如[]() { return 42; },支持值捕获[=]、引用捕获[&]、混合捕获[x, &y]及[this]指针捕获。用于STL算法如std::sort和std::for_each时可简化代码,配合mutable可修改值捕获的副本,但不改变外部变量。正确使用捕获机制可避免数据共享问题,提升编码效率。

c++ lambda表达式怎么用_c++匿名函数语法与捕获列表详解

lambda表达式是C++11引入的重要特性,用来定义匿名函数,简化代码逻辑,特别是在算法和回调场景中非常实用。它不需要命名就能直接定义函数对象,语法紧凑且可读性强。

基本语法结构

lambda表达式的完整语法如下:

[捕获列表](参数列表) mutable noexcept -> 返回类型 { 函数体 }

其中,只有捕获列表函数体是必需的,其余部分可根据需要省略。

最简单的形式如:

立即学习C++免费学习笔记(深入)”;

[]() { } —— 无参数、无返回值的空lambda。

常见写法示例:

  • []() { return 42; } —— 返回整数42
  • [](int x, int y) { return x + y; } —— 接收两个参数并返回和
  • [](int x) -> int { return x * 2; } —— 显式指定返回类型

捕获列表详解

捕获列表控制lambda如何访问外部作用域中的变量。这是lambda与普通函数的关键区别

支持以下几种捕获方式:

  • [=]:值捕获所有外部变量(按值复制)
  • [&]:引用捕获所有外部变量(共享原始变量)
  • [x, &y]:混合捕获,x按值,y按引用
  • [this]:捕获当前对象的this指针,可用于访问成员变量
  • [=, &var]:默认值捕获,但var按引用捕获
  • [&, var]:默认引用捕获,但var按值捕获

注意:未在捕获列表中声明的变量不能在lambda内部使用(除非是全局变量或静态变量)。

实际使用场景

lambda常用于STL算法中,替代函数对象或函数指针。

Docky AI
Docky AI

多合一AI浏览器助手,解答问题、绘制图片、阅读文档、强化搜索结果、辅助创作

Docky AI 100
查看详情 Docky AI

例如,对vector排序时自定义比较规则:

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

又如,配合std::for_each遍历并操作元素:

int sum = 0;
std::for_each(nums.begin(), nums.end(), [&sum](int n) { sum += n; });

这里使用引用捕获sum,使其能在lambda中被修改。

mutable关键字的作用

默认情况下,值捕获的变量在lambda中是只读的。加上mutable后,可以修改这些副本。

示例:

int x = 10;
auto f = [x]() mutable { x += 5; };
f(); // x的副本变为15,不影响外部x

注意:mutable不会影响外部变量本身,只允许修改内部拷贝。

基本上就这些。掌握lambda表达式能显著提升C++编码效率,尤其是在处理容器和异步任务时。关键是理解捕获机制,避免悬空引用或意外的数据共享。

以上就是C++ lambda表达式怎么用_C++匿名函数语法与捕获列表详解的详细内容,更多请关注php中文网其它相关文章!

最佳 Windows 性能的顶级免费优化软件
最佳 Windows 性能的顶级免费优化软件

每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号