zoukankan      html  css  js  c++  java
  • C++ 内联函数

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


    应注意如下几点: 
    1、内联函数可减少cpu的系统开销,并且程序的整体速度将加快,但当内联函数很大时,会有相反的作用,

        因此一般比较小的函数才使用内联函数。


    2、有两种内联函数的声明方法,一种是在函数前使用inline关见字,另一种是在类的内部定义函数的代码,

         这样的函数将自动转换为内联函数,而且没必要将inline放在函数前面。


    3、内联是一种对编译器的请求,下面这些情况会阻止编译器服从这项请求:函数中包含有循环,switch或

        goto语句,递归函数,含有static的函数。

    内联函数的定义:
    inline 应当是用于函数声明(Declaration)而非函数实现(Implementation)。但由于不同的编译器下inline

    关键字所修饰函数的调用范围不一致,因此,一种简单的作法是,将inline函数的声明和实现合一。如果确定函

    数仅应用于同一文件,我们可以将函数的声明和实现都放在.c/.cpp中;否则将其放入.h中(这样,包含了此头

    文件的任何文件都可以使用它)。

    注意以下几点:

    1、内联函数中不允许出现循环语句、开关语句(switch-case)和递归调用语句等

    2、在类内部定义并实现的成员函数都是内联函数

    3、在声明处可以省略inline,但在实现处必须加上该关键字,比如:

    class x {
        char s[10];
        void dog();
    };
    
    inline void x::dog()
    {
        ;
    }

    4、如果在类内定义的成员函数使用了 for, while, do-while, switch 等语句,该成员函数自动转换为非内联函数

    5、内联函数内不能有静态数据

    6、内联函数中不能有数组

    若不注意以上几点,内联函数就会作为一般函数来处理,因而也就没有起到提高效率的作用,失去了使用内联函数的初衷。

  • 相关阅读:
    跟KingDZ学HTML5之三 画布Canvas
    跟KingDZ学HTML5之七 探究Canvas之各种特效
    跟KingDZ学HTML5之八 HTML5之Web Save
    Aptana Studio 3 如何汉化,实现简体中文版
    跟KingDZ学HTML5之十一 HTML5 Form 表单新元素
    跟KingDZ学HTML5之九 HTML5新的 Input 种类
    跟KingDZ学HTML5之十二 HTML5 Form 表单元素新增属性
    跟KingDZ学HTML5之十三 HTML5颜色选择器
    SSL协议运行机制
    门面模式 到 socket
  • 原文地址:https://www.cnblogs.com/aqing1987/p/4389076.html
Copyright © 2011-2022 走看看