0

0

C++ lambda 表达式与闭包与函数指针的对比

王林

王林

发布时间:2024-08-28 14:12:05

|

889人浏览过

|

来源于php中文网

原创

lambda 表达式是匿名的内联函数对象,捕获外部变量,允许在函数指针之外访问和修改外部变量的状态;闭包包含 lambda 表达式和捕获的变量,保留对外部变量状态的引用;函数指针指向函数的地址,无法访问外部变量。

C++ lambda 表达式与闭包与函数指针的对比

C++ lambda 表达式与闭包与函数指针的对比

简介

在 C++ 中,lambda 表达式、闭包和函数指针是处理函数指针的强大工具。尽管它们之间存在相似之处,但它们在功能、语法和用途方面也有显着的差异。本文将深入探讨这些概念之间的对比,提供代码示例以阐明它们的特性。

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

lambda 表达式

lambda 表达式是匿名的内联函数对象。它使用 [capture_list](https://en.cppreference.com/w/cpp/language/lambda_expressions#Capture_list) 捕获外部变量,并用 [parameters](https://en.cppreference.com/w/cpp/language/lambda_expressions#Syntax) 指定函数参数和主体。

auto increment = [](int x) { return x + 1; };

闭包

闭包是由 lambda 表达式或函数对象与它捕获的变量一起形成的实体。由于闭包包含它所访问的外部变量的副本,因此它可以保留对这些变量的状态的引用,即使外部函数已经退出也是如此。

Python精要参考 pdf版
Python精要参考 pdf版

这本书给出了一份关于python这门优美语言的精要的参考。作者通过一个完整而清晰的入门指引将你带入python的乐园,随后在语法、类型和对象、运算符与表达式、控制流函数与函数编程、类及面向对象编程、模块和包、输入输出、执行环境等多方面给出了详尽的讲解。如果你想加入 python的世界,David M beazley的这本书可不要错过哦。 (封面是最新英文版的,中文版貌似只译到第二版)

下载

函数指针

函数指针指向函数的内存地址。它允许将函数传递给其他函数或存储在数据结构中。函数指针的语法如下:

int (*add)(int, int);

对比

特性 lambda 表达式 闭包 函数指针
创建 匿名的内联函数对象 封装了 lambda 表达式和捕获变量 指向函数的地址
捕获变量 可以使用 capture_list 捕获 是,通过 lambda 表达式捕获 不支持捕获变量
状态 可以保持对外部变量状态的引用 可以保持对外部变量状态的引用 无法访问外部变量
语法 使用 [ ] 语法 包含 lambda 表达式和外部变量 使用类型和星号(*)

实战案例

使用 lambda 表达式排序容器

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

使用闭包存储状态

auto counter = []() {
    int count = 0;
    return [&count] { return ++count; };
};

auto c1 = counter();
auto c2 = counter();

std::cout << c1() << std::endl; // 1
std::cout << c2() << std::endl; // 1

使用函数指针传递函数

void print(int (*func)(int)) {
    std::cout << func(10) << std::endl;
}

int add(int x) { return x + 1; }

print(add); // 11

相关专题

更多
lambda表达式
lambda表达式

Lambda表达式是一种匿名函数的简洁表示方式,它可以在需要函数作为参数的地方使用,并提供了一种更简洁、更灵活的编码方式,其语法为“lambda 参数列表: 表达式”,参数列表是函数的参数,可以包含一个或多个参数,用逗号分隔,表达式是函数的执行体,用于定义函数的具体操作。本专题为大家提供lambda表达式相关的文章、下载、课程内容,供大家免费下载体验。

202

2023.09.15

python lambda函数
python lambda函数

本专题整合了python lambda函数用法详解,阅读专题下面的文章了解更多详细内容。

187

2025.11.08

treenode的用法
treenode的用法

​在计算机编程领域,TreeNode是一种常见的数据结构,通常用于构建树形结构。在不同的编程语言中,TreeNode可能有不同的实现方式和用法,通常用于表示树的节点信息。更多关于treenode相关问题详情请看本专题下面的文章。php中文网欢迎大家前来学习。

529

2023.12.01

C++ 高效算法与数据结构
C++ 高效算法与数据结构

本专题讲解 C++ 中常用算法与数据结构的实现与优化,涵盖排序算法(快速排序、归并排序)、查找算法、图算法、动态规划、贪心算法等,并结合实际案例分析如何选择最优算法来提高程序效率。通过深入理解数据结构(链表、树、堆、哈希表等),帮助开发者提升 在复杂应用中的算法设计与性能优化能力。

5

2025.12.22

go语言闭包相关教程大全
go语言闭包相关教程大全

本专题整合了go语言闭包相关数据,阅读专题下面的文章了解更多相关内容。

130

2025.07.29

http与https有哪些区别
http与https有哪些区别

http与https的区别:1、协议安全性;2、连接方式;3、证书管理;4、连接状态;5、端口号;6、资源消耗;7、兼容性。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

1653

2024.08.16

excel制作动态图表教程
excel制作动态图表教程

本专题整合了excel制作动态图表相关教程,阅读专题下面的文章了解更多详细教程。

24

2025.12.29

freeok看剧入口合集
freeok看剧入口合集

本专题整合了freeok看剧入口网址,阅读下面的文章了解更多网址。

74

2025.12.29

俄罗斯搜索引擎Yandex最新官方入口网址
俄罗斯搜索引擎Yandex最新官方入口网址

Yandex官方入口网址是https://yandex.com;用户可通过网页端直连或移动端浏览器直接访问,无需登录即可使用搜索、图片、新闻、地图等全部基础功能,并支持多语种检索与静态资源精准筛选。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

207

2025.12.29

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
C# 教程
C# 教程

共94课时 | 5.6万人学习

C 教程
C 教程

共75课时 | 3.8万人学习

C++教程
C++教程

共115课时 | 10.5万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

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