zoukankan      html  css  js  c++  java
  • 39、内联函数和宏定义的区别

    内联(inline)函数和普通函数相比可以加快程序运行的速度,因为不需要中断调用,在编译的时候内联函 数可以直接嵌入到目标代码中。

    一、内联函数适用场景

    1.使用宏定义的地方都可以使用inline函数

    2.作为类成员接口函数来读写类的私有成员或者保护成员,会提高效率

    二、为什么不能把所有的函数写成内联函数

    内联函数以代码复杂为代价,它以省去函数调用的开销来提高执行效率。所以一方面如果内联函数体内 代码执行时间相比函数调用开销较大,则没有太大的意义;另一方面每一处内联函数的调用都要复制代 码,消耗更多的内存空间,因此以下情况不宜使用内联函数:

    1.函数体内的代码比较长,将导致内存消耗代价

    2.函数体内有循环,函数执行时间要比函数调用开销大

    主要区别

    1.内联函数在编译时展开,宏在预编译时展开

    2.内联函数直接嵌入到目标代码中,宏是简单的做文本替换

    3.内联函数有类型检测、语法判断等功能,而宏没有

    4.内联函数是函数,宏不是

    5.宏定义时要注意书写(参数要括起来)否则容易出现歧义,内联函数不会产生歧义

    6.内联函数代码是被放到符号表中,使用时像宏一样展开,没有调用的开销,效率很高

    7.在使用时,宏只做简单字符串替换(编译前)。而内联函数可以进行参数类型检查(编译时),且具有返回值。

    8.内联函数本身是函数,强调函数特性,具有重载等功能。

    9.内联函数可以作为某个类的成员函数,这样可以使用类的保护成员和私有成员,进而提升效率。而当一个表达式涉及到类保护成员或私有成员时,宏就不能实现了。

  • 相关阅读:
    vue中使用ztree时报找不到init方法错的解决方案
    element-ui 自定义表单验证 , 但是不出现小红心解决方案
    iframe子页面与父页面之间通信
    GSS系列题解——最大子段和系列
    平衡树 区间树 学习
    数据结构:从入门到精通
    后缀数组
    2019元旦总结,迎接2019
    网络流+费用流 学习
    SLT学习——leafes tree扩展 【文艺平衡树】
  • 原文地址:https://www.cnblogs.com/crbhf/p/14925215.html
Copyright © 2011-2022 走看看