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

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

相关推荐
jinyishu_8 小时前
模拟实现 C++ 栈和队列——从适配器模式看懂 STL 容器之美
java·c++·适配器模式
hehelm8 小时前
AI大模型接入SDK—通用模块设计
linux·开发语言·c++
hold?fish:palm11 小时前
RDB全量快照备份
c++·redis·后端
盐焗鹌鹑蛋12 小时前
【C++】C++11:列表初始化、声明、STL升级
c++
ComputerInBook14 小时前
c 和 c++ 中的宏块(macro)
c语言·c++··宏块·宏指令
AA陈超15 小时前
004 T02 - 俯视角摄像机系统 设计文档
网络·c++·ue5·虚幻引擎
bu_shuo15 小时前
c与cpp中的argc和argv
c语言·c++·算法
蓝创精英团队15 小时前
VCPKG 跨平台C++ 库管理器
c++·vcpkg
Jayden_Ruan16 小时前
C++组合的输出
c++·算法·深度优先
froyoisle17 小时前
CSP 真题解析:[CSP-J 2020-T3] 表达式
c++·算法·csp·信息学·信奥赛