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

      在C中可以使用#define提高执行效率,但是容易出错,而在C++ 支持函数内联,其目的亦是如此。

    (1)inline的工作原理:

      对于任何内联函数,编译器在符号表里放入函数声明(包括名字,参数类型,返回值类型)。如果编译器没有发现内联函数存在错误,那么该函数的代码也被放入符号表中。在调用一个内联函数时,编译器首先检查调用是否正确,比如进行类型安全检查,进行类型转换等。如果正确,内涵函数的代码将会直接替换函数调用,于是省去了函数调用的开销。

      这个与#define是不同的,因为#define不能进行类型安全检查,或者自动类型转换。如果内联函数时成员函数,对象的地址this会被放在合适的地方,这个也是预处理不能办到的。

    (2)inline的编程风格:

      关键字inline必须与函数定义提放在一起才能使函数成为内联,仅将inline放在函数声明中是无效的,比如:

      inline void foo(void);    // 仅与声明放在一起无效    

      void foo(void)

      {...} 

      与定义体放在一起是有效的,比如:

      void foo(void);     

      inline void foo()

      {....}

      这样可以看出,inline是一种用于“实现”的关键字,但是个人感觉,在声明中也写上inline,虽然这样可能导致声明与定义混为一谈,但是这样很容易让你的小伙伴们一目了然。

    (3) inline的使用:

      在一定程度上,使用inline的确可以提高函数的执行效率,但是依然建议慎用内联。原因在于内联是以代码复制为代价的,仅仅省去了函数的调用开销,但是执行函数体内代码的时间变长。所以建议:inline函数体内的代码不宜过长。

      当然,一些编译器会根据函数的定义体,自动取消不值得的内联,不过目前我还没注意到。等发现了再做补充^_^

  • 相关阅读:
    SQL server 数据库安装
    jmeter接口测试
    jmeter测试之-脚本制作
    HTTP协议
    计算机原理
    Ubuntu 14.04 搭建 LNMP
    pycharm使用技巧
    hihoCoder #1867 GCD
    Mail.Ru Cup 2018 Round 2 Problem C Lucky Days
    C++ Essentials 之 lower_bound 和 upper_bound 的比较函数格式不同
  • 原文地址:https://www.cnblogs.com/SkyflyBird/p/4575138.html
Copyright © 2011-2022 走看看