一. 内联函数的定义
以 inline 修饰的函数叫做内联函数, 编译时 C++ 编译器会在调用内联函数的地方展开函数, 即用函数体替换函数的调用, 没有函数调用建立栈帧的开销, 从而提升程序运行的效率.
二. 内联函数带来的优化
未使用内联函数时需要调用 Add 函数.
如果在上述函数前增加 inline 关键字将其改成内联函数, 在编译期间编译器会用函数体替换 Add 函数的调用.
三. 内联函数的特性
1. 内联函数的优缺点
inline 是一种以空间换时间的做法, 如果编译器将函数当成内联函数处理, 在编译阶段, 会用函数体替换函数调用.
缺陷: 可能会使目标文件变大.
优势: 减少函数调用开销, 提高程序运行效率.
2. inline 只是一个建议
inline 对于编译器而言只是一个建议, 不同编译器关于 inline 实现机制可能不不同, 一般建议: 将函数规模较小 (即函数不是很长, 具体没有准确的说法, 取决于编译器内部实现) 不是递归、且频繁调用的函数采用 inline 修饰, 否则编译器会忽略 inline 特性.
下图为《 C++ primer 》第五版关于 inline 的建议:
3. inline 声明和定义不能分离
inline 不建议声明和定义分离, 否则会导致链接错误. 因为使用 inline 后函数被展开, 在符号表中没有 inline 函数的地址, 无法进行链接.
Func.h
#pragma once
#include <iostream>
using namespace std;
inline void Func(int i);
Func.cpp
#include "Func.h"
void Func(int i)
{
cout << i << endl;
}
test.cpp
#include "Func.h"
int main()
{
Func(0);
return 0;
}