zoukankan      html  css  js  c++  java
  • C++ 内联函数 inline关键字

    inline 关键字主要功能是为了 代替掉 宏代码片段。

     在C++中使用关键字inline关键字声明内联函数。

    inline int fun(int a,int b)
    {
        return a < b ? a : b; //如果a<b  成立 a=a 否则a=b
    }

      

      

    #include <stdio.h>
    
    #define FUN(a,b) ((a) < (b) ? (a) : (b))
    
    inline int fun(int a,int b)
    {
        return a < b ? a : b; //如果a<b  成立 a=a 否则a=b
    }
    
    int main(int argc, char *argv[])
    {
        int a = 1,b=3;
        int val = FUN(++a,b);
        printf("Begin...
    ");
        printf("val = %d
    ",val);
        printf("a = %d
    ",a);
        printf("b = %d
    ",b);
        printf("End...
    ");
        return 0;
    }

      如果调用宏FUN    int val = FUN(++a,b); 展开就是  int val = ((++a) < (b) ? (++a) : (b));  这里的Val = 3

      而调用 fun 这个函数  int val = 2

       从而说明 宏代码块有一个缺点就是宏代码块只是做内容的替换。

    C++ 中inline 内联编译的限制:

      1、不能存在任何形式的循环语句

      2、不能存在过多的条件判断语句

      3、函数体不能过于庞大

      4、不能对该函数进行取地址操作

      5、内联函数声明必须在调用语句之前。

    内联函数:

    C++编译器可以将一个函数进行内联编译

    C++编译器直接将函数体插入函数调用的地方,从而内联函数没有普通函数调用时的额外开销。(压栈、跳转、返回)。

    注意:C++编译器不一定满足函数的内联请求,也就是说使用inline 关键字声明内联函数可能会被编译器拒绝。从而建立内联失败

    强制内联:

    C++编译器提供了 扩展语法,能够对函数进行强制内联

      g++ :_attrbute_((always_inline))  属性

      MSVS:_forceinline

     

  • 相关阅读:
    每周进度及工作量统计——2016.10.06-2016.10.13
    SCRUM站立会议模拟
    java词频统计——web版支持
    每周进度及工作量统计——2016.9.22--2016.9.29
    简易四则运算生成程序——第一次改进后的单元测试
    java词频统计——改进后的单元测试
    第一次通读《构建之法》阅读笔记
    centOS6.5网络配置
    webpack安装
    CommonJS和AMD/CMD
  • 原文地址:https://www.cnblogs.com/hjxzjp/p/11588122.html
Copyright © 2011-2022 走看看