天天看点

宏(#define)和内联(inline)函数的理解以及区别宏(#define)和内联(inline)函数的理解以及区别

宏(#define)和内联(inline)函数的理解以及区别

宏的缺点:

  • 没有类型检查,不安全。
  • 宏是在预处理时进行简单文本替换,并不是简单的参数传递,很难处理一些复杂的情况,或者当编译出错时,提醒可读性差。
  • 如果宏函数本身很长,会造成代码冗余。
  • 宏无法进行调试。
  • 当预处理搜索#define定义的符号时,字符串常量并不被搜索。

宏的优点:

  • 加快了代码的运行效率,不用再去调用浪费时间。
  • 让代码变得更加的通用。

内联函数

类中的成员函数默认是内联函数。

内联函数内不允许有循环或递归语句。

内联函数的定义必须出现在第一次调用内联函数之前。

缺点:

  • 因为内联函数是在调用处展开,所以会使代码变长,占用更多内存。

优点:

  • 有类型检测,更加的安全。
  • 内联函数是在程序运行时展开,而且是进行参数传递。
  • inline 关键字只是一个对编译器的建议,如果函数本体不符合内联函数的标准,编译器就会将这个函数当做是普通函数。

对比

相同点:

  • 两者都是可以加快程序运行效率,使代码变得更加通用

不同点:

  • 内联函数的调用是传参,宏定义只是简单的文本替换
  • 内联函数可以在程序运行时调用,宏定义是在程序编译进行
  • 内联函数有类型检测更加的安全,宏定义没有类型检测
  • 内联函数在运行时可调式,宏定义不可以
  • 内联函数可以访问类的成员变量,宏不可以
  • 类中的成员函数是默认的内联函数

叮~?