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

     

  • 相关阅读:
    如何在IIS7/7.5上配置IISADMPWD
    运用DebugDiag诊断ASP.Net异常
    vuecli3修改项目启动端口
    彻底删除vscode及安装的插件和个人配置信息
    angular中的 input select 值绑定无效,以及多出一个空白选项问题
    简述MVC模式
    vuecli3 运行报错
    前端开发规范
    nodejs 下载最新版本
    小程序 自定义弹窗出现后存在滚动穿透问题
  • 原文地址:https://www.cnblogs.com/hjxzjp/p/11588122.html
Copyright © 2011-2022 走看看