以inline修饰的函数叫做内联函数,编译时C++编译器会在调用内联函数的地方展开,没有函数调用建立栈帧的开销,内联函数提升程序的运行效率。
Inline是以空间换时间;但是这里的空间注意并不是内存的空间,而是可执行程序的空间变大了;在编译阶段,会用函数体替换函数体替换函数调用。
Inline对于编译器而言只是一个建议,不同编译器关于inline实现机制可能不同,(假如在调用一个指令很长的函数时,即使你使用了inline内联函数,但是如果这个函数超过了这个编译器的规定线时,编译器会忽略这个inline特性);
所以inline一般建议:
先需要知道的:
- 程序翻译的过程:预处理(去注释)、编译(判断语法)、汇编(二进制目标文件)、链接(可执行程序);
- 其中“链接”将一个项目中的许多个.o/.cpp/.h等文件进行“交互”;
- 因为“.h”文件就是声明;“.cpp”文件就是定义;“主要.c”就是主函数;
- 那么在主要.c文件中要执行“某个函数”的时候,因为函数的定义并没有在这个文件中进行定义,所以就找不到“某个函数”的地址;
- 而链接就是解决上面这个问题的;
内联函数是不会直接调用函数的,不会直接给这个函数开辟栈帧,而是会在调用内联函数的地方展开这个函数;
而此时inline被展开,就没有了函数地址了,链接就会找不到了。
优点:
缺点:
使用宏时容易犯错注意点:
核心点:宏是预处理阶段进行替换