c++和闭包

本文探讨了C++如何实现闭包功能,通过仿函数、lambda表达式和boost::bind/std::bind三种方式,并介绍了闭包的定义、状态捆绑及捕获机制。C++11引入的lambda表达式简化了闭包的使用,但闭包类型的隐藏性增加了保存闭包的挑战。此外,文章还讨论了闭包在回调、函数式编程和并发场景中的作用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

写在前面

之前理解了python当中的闭包的概念和使用,虽然对比而言c++不支持函数的嵌套定义但是c++可否也实现闭包的功能呢?

主要内容

闭包有很多种定义,一种说法是,闭包是带有上下文的函数。说白了,就是有状态的函数。更直接一些,不就是个类吗?换了个名字而已。
一个函数, 带上了一个状态, 就变成了闭包了. 什么叫 “带上状态” 呢? 意思是这个闭包有属于自己的变量, 这些个变量的值是创建闭包的时候设置的, 并在调用闭包的时候, 可以访问这些变量.

闭包的状态捆绑, 必须发生在运行时.

C++ 里使用闭包有3个办法:

仿函数,重载(操作符的class)

因为闭包是一个函数+一个状态, 这个状态通过 隐含的 this 指针传入. 所以 闭包必然是一个函数对象. 因为成员变量就是极好的用于保存状态的工具, 因此实现 operator() 运算符重载, 该类的对象就能作为闭包使用. 默认传入的 this 指针提供了访问成员变量的途径.

lambda 表达式

c++11 里提供的 lambda表达式就是很好的语法糖. 其本质和手写的函数对象没有区别.

float round = 0.5;
auto f = [=](float f
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值