inline函数返回值_函数对象的使用

#include 

函数对象

FunctionObjectType fo;//定义一个变量
fo(...)//调用operator()

函数是一个对象,并不是一个简单的函数指针:void fo(...)。

  1. 拥有状态;
  2. 有类型;
  3. 速度比function pointor更快。

例程中,async要调用函数,我们实现了多种调用方式。

  • f1:函数对象是新建出来的;
  • f2:调用了print函数指针,并传入了参数;
  • f3:使用lamda作为函数参数,引用了b;
  • f4:直接把函数对象传入;
  • f5:调用成员函数,给出了哪个成员函数,哪个对象的成员函数,及成员函数需要的参数。

LAMDA

C++11 Lambda函数 - WindSun - 博客园​www.cnblogs.com
db08651ccac376de5eda0c6f22d2004f.png

5a7437fa7e4768e676c0947821ed0060.png

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

auto	

上例展示如何使用[=]以捕获父域所有对象的拷贝。

可以把a赋值给e,但是不能直接使用a.print()。

上例还展示了如何明确指出返回值的数据类型。

Lambda与STL

  从C++11开始,Lambda被广泛用在STL中,比如foreach。与函数指针比起来,函数指针有巨大的缺陷:

1.函数定义在别处,阅读起来很困难;

2.使用函数指针,很可能导致编译器不对其进行inline优化,循环次数太多时,函数指针和Lambda比起来性能差距太大。函数指针不能应用在一些运行时才能决定的状态,在没有C++11时,只能用函数对象。使得学习STL算法的代价大大降低。

但是Lambda并不是仿函数的完全代替者。由Lambda的捕捉列表的限制造成的,仅能捕捉副作用域的变量。放函数具有天生跨作用域共享的特征。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值