1.介绍
inline是C++的一个关键字,用于向编译器建议将函数或变量内联展开,减少函数调用的开销。
内联展开是指将函数体直接插入到调用处,而不是通过常规的函数调用机制执行。
2.用法
(1)内联函数
在函数前加上inline关键字,可以将函数声明为内联函数:
inline int add(int a, int b) {
return a + b;
}
作用:
(1)减少函数调用开销:内联函数将函数体直接插入调用处,避免了函数调用的压栈、跳转和返回等操作。
(2)使用于小型函数:通常用于简单的、调用频繁的函数。
示例:
#include <iostream>
inline int square(int x) {
return x * x;
}
int main() {
int result = square(5); // 编译器可能会将 square(5) 替换为 5 * 5
std::cout << "Result: " << result << std::endl; // 输出 25
return 0;
}
(2)内联变量(C++17引入)
C++17引入内联变量,运行在头文件中定义变量而不会导致重复定义错误。例如:
inline int globalVar = 42; // 可以在头文件中定义
作用:
(1)解决头文件中变量定义问题:在C++17前,在头文件中定义变量需要在源文件中单独定义,否者会导致链接错误。
(2)简化代码编写。
示例:
// myheader.h
#ifndef MYHEADER_H
#define MYHEADER_H
inline int globalVar = 42; // 在头文件中定义内联变量
#endif // MYHEADER_H
3.注意事项
(1)编译器决定。inline只是对编译器的建议,编译器可以选择忽略。编译器会根据函数复杂度、调用频率等因素决定是否内联。
(2)适用场景。适合小型、频繁调用的函数。不适合复杂函数或递归函数。
(3)内联函数通常定义在头文件中,以便多个源文件展开。
(4)内联变量主要用于头文件中定义全局变量。
4.内联函数的优缺点
优点:
(1)减少函数调用开销,提高小型函数执行效率。
(2)避免宏的缺陷:内联函数比宏更加安全,支持类型检测与调试。
缺点:
(1)代码膨胀:如果内联函数体较大,会导致生成的二进制文件变大。
(2)编译时间增加:内联展开会增加编译时间。
5.总结
inline关键字用于建议编译器将函数或变量内联展开。内联函数适用于小型、频繁调用的函数,可以减少函数调用开销。 内联变量(C++17)允许在头文件中定义变量,避免重复定义错误。使用 inline 时需注意代码膨胀和编译时间增加的问题。