内联函数

来源:互联网 发布:数据接口协议 编辑:程序博客网 时间:2024/06/07 16:38

       c++从c中继承的一个重要特征是效率。宏可以保证很高效率,因为预处理器直接用宏代码区代替宏调用,所以没有了参数压栈、call、return、返回参数等开销,所有的工作由预处理器来完成。

        但是宏存在两个缺陷:宏并不总是想一个函数调用(当宏调用使用表达式做参数、符号优先级问题等引起),且c++预处理器不允许访问类的成员函数。为此,c++引入了内联函数。内联函数和普通函数的唯一区别就是内联函数在调用的地方像宏一样展开,所以不需要函数调用的开销。我们应该不使用宏,而使用内联函数。c++语言规定:只有在类声明结束之后,其中的内联函数才会被计算。

        一般应把内联函数放在头文件中。

         任何在类中定义的函数体自动成为内联函数,而类中的函数声明仍然只是普通函数,在普通函数之前加inline关键字使之成为内联函数(必须使函数体和声明在一起,否则编译器将其作为普通函数对待)。当使用内联函数时,编译器将函数调用用替换为函数体,因为消除开销。内联代码虽然占用空间,但如果函数体较小,将比一个普通函数调用产生的代码(参数压栈和执行CALL)占用的空间还要小。

       对于任何函数,编译器在它的符号表里放入函数类型(即包括名字和参数类型的函数原型及函数返回类型)。当编译器看到内联函数和堆内联函数体进行分析没有发现错误时,就将对应的函数体代码(源程序活汇编指令)也放入符号表。如果内联函数的函数体过大,编译器通常会放弃内联方式,因为函数体过大导致调用的时间将比执行的时间少的多。

1 0
原创粉丝点击