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

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

相关推荐
BadBadBad__AK5 小时前
线段树维护区间 k 次方和
c++·数学·算法·stl
卷无止境17 小时前
Eigen 库如何借助 OpenMP 加速计算
c++·后端
卷无止境18 小时前
OpenMPI、MPICH 与 OpenMP:关系、核心概念与架构全解
c++·后端
郝学胜_神的一滴2 天前
CMake 30:循环语法全解|foreach_while双循环精讲、迭代技巧与实战避坑指南
c++·cmake
卷无止境4 天前
C++ 的Eigen 库全解析
c++
卷无止境4 天前
现代 C++特性大盘点:一门脱胎换骨的老语言
c++·后端
郝学胜_神的一滴4 天前
CMake 27:缓存变量的特性、语法、类型与实操全解
c++·cmake
博客18006 天前
酷宝的使用方法,超好用的免费界面库,C++、MFC可用
c++·mfc·界面库·库来帮·酷宝
郝学胜_神的一滴6 天前
CMake 026:属性体系精讲、四大作用域全解 & 实战代码落地
c++·cmake
众少成多积小致巨6 天前
JNI (Java Native Interface) 技术手册中文参考指南
android·java·c++