欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

C++内联函数

程序员文章站 2024-03-22 19:29:58
...

概念:

以inline修饰的函数叫做内联函数,编译时C++编译器会在调用内联函数的地方展开,没有函数压栈的开销,可以提升程序运行的效率。

本质:

为了解决C语言的缺陷,C语言我们用的是宏定义来展开,宏有很大的缺陷,
宏的最主要缺陷是:没有类型检查,不可调试。所以内联函数取代宏,方便,直接在调用的地方展开,一般是小函数(15行之内的)

C++内联函数
如果在上述函数前增加inline关键字将其改成内联函数,在编译期间的编译器会用函数体替换函数的调用,避免开辟栈帧的麻烦,提高效率

内联函数和普通函数的区别:

当编译器处理调用内联函数的语句时,不会将该语句编译成函数调用的指令,而是直接将整个函数体的代码插人调用语句处,
就是把整个函数的定义在调用的地方展开,重新写了一样。

特性

  1. inline是一种以空间换时间的做法,省去调用函数的开销。所以代码很长或者有递归或者多重循环的函数不适宜作为内联函数,这样会代码冗余
  2. inline对预编译而言只是一个建议,编译器会自动优化,如果定义为inline的函数体内有循环或递归等,编译器优化时会忽略掉内联。
  3. inline不建议声明与定义分离,分离会导致连接错误。因为inline被展开,就没有函数地址了,链接就会找不到

总结:

有了内联函数,就能像调用一个函数那样方便地重复使用一段代码,而不需要付出执行函数调用的额外开销。很显然,使用内联函数会 使最终可执行程序的体积增加**,若内联函数在程序调用次数过多(内联函数展开次数较多),或者代码过长,会导致代码冗余,可读性较差**。总之就是以时间换取空间,或增加空间消耗来节省时间

C++中内联函数可以替代宏【面试题】

我们先来看一下宏上的优缺点:

宏的优缺点:
优点:

  1. 增强代码的复用性
  2. 提高性能,效率

缺点:

  1. 不方便调试宏。(因为预编译阶段进行了宏替换)
  2. 没有类型安全检查,可读性也较差

C++中哪些可以替代宏?

  1. 常量定义 换用const
  2. 函数定义 换用内联函数