C++ | inline 内联函数是什么意思?【面试题】宏优缺点?详细讲解

内联函数

内联函数概念

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

内联函数特性

Inline是以空间换时间;但是这里的空间注意并不是内存的空间,而是可执行程序的空间变大了;在编译阶段,会用函数体替换函数体替换函数调用。

Inline对于编译器而言只是一个建议,不同编译器关于inline实现机制可能不同,(假如在调用一个指令很长的函数时,即使你使用了inline内联函数,但是如果这个函数超过了这个编译器的规定线时,编译器会忽略这个inline特性);

所以inline一般建议:

  1. 函数规模较小(函数不是很长,具体没有准确说法,取决于编译器的内部实现);
  2. 不是递归、且频繁调用函数
  3. 不建议声明和定义分离

为什么不建议inline内联函数声明和定义分离呢?

先需要知道的:

  • 程序翻译的过程:预处理(去注释)、编译(判断语法)、汇编(二进制目标文件)、链接(可执行程序);
  • 其中"链接"将一个项目中的许多个.o/.cpp/.h等文件进行"交互";
  • 因为".h"文件就是声明;".cpp"文件就是定义;"主要.c"就是主函数;
  • 那么在主要.c文件中要执行"某个函数"的时候,因为函数的定义并没有在这个文件中进行定义,所以就找不到"某个函数"的地址;
  • 而链接就是解决上面这个问题的;

内联函数是不会直接调用函数的,不会直接给这个函数开辟栈帧,而是会在调用内联函数的地方展开这个函数;

而此时inline被展开,就没有了函数地址了,链接就会找不到了。

面试题:宏优缺点

优点:

  1. 增强代码的复用性;
  2. 提高性能;

缺点:

  1. 不方便调试宏(因为预编译阶段进行了替换);
  2. 导致代码可读性差,可维护性差,容易误用;
  3. 没有类型安全的检查。

使用宏时容易犯错注意点:

  1. 不是函数
  2. 分号
  3. 括号控制优先级

核心点:宏是预处理阶段进行替换

相关推荐
CSDN_RTKLIB1 天前
C++取余符号%
开发语言·c++
WBluuue1 天前
Codeforces Good Bye 2025 Div1+2(ABCDE)
c++·算法
明洞日记1 天前
【VTK手册034】 vtkGeometryFilter 深度解析:高性能几何提取与转换专家
c++·图像处理·算法·ai·vtk·图形渲染
额呃呃1 天前
operator new/delete
开发语言·c++·算法
平生不喜凡桃李1 天前
Google C++ Style Guide : 变量与函数名
开发语言·c++·google c++
HL_风神1 天前
设计原则之单一职责原则
c++·学习·设计模式·单一职责原则
linzihahaha1 天前
C++ 单例模式总结
开发语言·c++·单例模式
一个不知名程序员www1 天前
算法学习入门--- set与map(C++)
c++·算法
小此方1 天前
Re: 从零开始的C++ 入門(十)类和对象·最终篇下:类型转换、static成员、友元、匿名对象、内部类、拷贝编译优化
开发语言·c++·底层
王老师青少年编程1 天前
2025年12月GESP(C++)考级真题及详细题解(汇总版)
c++·题解·真题·gesp·csp·信奥赛·考级