您的位置:首页 > 其它

基本语言细节--inline函数的几点分析

2013-11-14 16:22 253 查看
基本语言细节--inline函数的几点分析

1.定义:内联函数从源代码层看,有函数的结构,而在编译后,却不具备函数的性质。内联函数不是在调用时发生控制转移,而是在编译时将函数体嵌入在每一个调用处。编译时,类似宏替换,但比宏更安全,使用函数体替换调用处的函数名。一般在代码中用inline修饰,但是能否形成内联函数,需要看编译器对该函数定义的具体处理。

2.好处:内联扩展是用来消除函数调用时的时间开销。它通常用于频繁执行的函数。
一个小内存空间的函数非常受益。

3.为什么inline能取代宏:

1、 inline 定义的类的内联函数,函数的代码被放入符号表中,在使用时直接进行替换,(像宏一样展开),没有了调用的开销,效率也很高。

2、 内联函数是一个真正的函数,编译器在调用一个内联函数时,会首先检查它的参数的类型,保证调用正确。然后进行一系列的相关检查,就像对待任何一个真正的函数一样。这样就消除了宏的隐患和局限性。

3、 inline 可以作为某个类的成员函数,当然就可以在其中使用所在类的保护成员及私有成员。

4.inline与宏的区别:

1、内联函数在编译时展开,宏在预编译时展开;

2、内联函数直接嵌入到目标代码中,宏是简单的做文本替换;

3、内联函数有类型检测、语法判断等功能,而宏没有;

4、inline函数是函数,宏不是;

5、宏定义时要注意书写(参数要括起来)否则容易出现歧义,内联函数不会产生歧义

5.inline注意事项:

1、在内联函数内不允许用循环语句和开关语句。

2、内联函数的定义必须出现在内联函数使用内联将导致第一次被调用之前。

3、内联函数只是向编译器的一个申请。

4、如果函数体内的代码比较长,内存消耗代价较高。

5.析构函数和构造函数,应该不用内联,因为再其执行过程中会有隐式成员以及基类的析构函数(如果有的话)被调用。

6.递归函数不应该声明为内联函数。

7.内联函数的扩展汇带来参数求值操作以及临时性对象的管理,而致使程序膨胀!不可轻易使用!

wolangjushi 于HUST2013.11.14 整理于网上
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: