函数的解析之C/C++

      函数是程序的执行模块,是整个项目的细胞,如何组织好每一个函数的结构,如何提高程序的可读性和运行效率,是程序员们不断品味的主体。有时函数的设计能直接体现出程序员对C/C++的理解和感悟。

 

      C/C++的函数类型不对外乎以下几种,有些描述可能不太贴切:

      一般函数,函数重载,虚函数,函数模板,内联函数,静态函数,回调函数,宏定义实现函数效果。

 

1. 函数重载:

    编译时根据参数进行重载解析,执行和一般的函数一样。无附加效率开销,只是编译期间价格表之区分参数和返回而已。


2. 虚函数:

    对于满足多态的有运行时开销,对于其它的,和普通成员函数一样。运行时多态,这时候会因为虚表的维护而变慢,这是面向对象编程相对于纯C主要的开销增加,首先要知道一点,虚函数只有对针和引用才能有效,对象不行。


3. 函数模板:

    显示或者隐式实例化,非成员模板函数的和非成员函数一样,成员模板函数和成员函数一样。虚函数是运行时多态,你可以把模板理解为“编译期多态”,会根据你的调用实现多个函数体,增加体积开销,但效率高,因为就和普通函数一样了。


4. 内联函数:

    代码可能在调用处展开,要求调用时看到的不只是声明,保证在所有的模块中地址一样。可以理解为宏的函数写法,用到的时候直接取代的,没有函数调用的开销,只有代码执行开销


5. 静态函数:

    一般的只限制在该模块内可见,而类中的和普通函数一样。可认为该类对于他仅仅是个命名空间,没有其他的关系,关键是没有this指针,所以无法调用其他成员,效率上和普通函数一样


6. 回调函数:

    __stdcall的函数指针。一般在C/C++里函数参数里的函数指针(多线程,qsort)就是回调函数,要将函数地址传给另一个函数,又另一个函数调用本函数,这是一种函数用法,不是函数类型,不过由于取值的关系,回调函数不能内联,要求静态或全局(成员函数理论上也可以,但是比较非主流),相对于内联和宏比较慢。


7. 宏定义函数:

    宏就是“替代”,可以起到内联函数的作用。

 

 对于一般函数会有一个跳转表:jmp XXXX。对于一般静态的函数,没有。对于release可能不会有这个跳转表。

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值