您的位置:首页 > 编程语言 > C语言/C++

函数的解析之C/C++

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



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

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



1. 函数重载:

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

2. 虚函数:

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

3. 函数模板:

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

4. 内联函数:

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

5. 静态函数:

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

6. 回调函数:

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

7. 宏定义函数:

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



对于一般函数会有一个跳转表:jmp XXXX。对于一般静态的函数,没有。对于release可能不会有这个跳转表。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: