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. 括号控制优先级

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

相关推荐
mit6.8241 小时前
[Meetily后端框架] Whisper转录服务器 | 后端服务管理脚本
c++·人工智能·后端·python
L_autinue_Star2 小时前
手写vector容器:C++模板实战指南(从0到1掌握泛型编程)
java·c语言·开发语言·c++·学习·stl
无小道5 小时前
c++--typedef和#define的用法及区别
c语言·开发语言·汇编·c++
mit6.8246 小时前
[Vroom] 位置与矩阵 | 路由集成 | 抽象,解耦与通信
c++·人工智能·算法
ChuHsiang6 小时前
【C++】模板(二)
c++
小林C语言7 小时前
11.9 C++对象指针
c++
oioihoii8 小时前
C++11中的std::minmax与std::minmax_element:原理解析与实战
java·开发语言·c++
CS semi8 小时前
C++每日刷题day2025.7.10
开发语言·c++
AI+程序员在路上9 小时前
Qt6中模态与非模态对话框区别
开发语言·c++·qt
岁忧14 小时前
(LeetCode 面试经典 150 题 ) 11. 盛最多水的容器 (贪心+双指针)
java·c++·算法·leetcode·面试·go