C++内联函数的用法(附带实例)
在 C++ 程序中,通过 inline 关键字可以把函数定义为内联函数,编译器会在每个调用该函数的地方展开一个函数的副本。
例如,创建一个内联函数 IntegerAdd 并进行调用,代码如下:
IntegerAdd() 函数被定义为内联函数,其在计算机中的执行过程如下:
建议在函数实现代码很简短或者调用该函数次数相对较少的情况下将函数定义为内联函数,内联函数通常定义一条返回语句,不能包含循环或者 switch 语句。例如,一个递归函数不能在调用时完全展开,一个 1000 行代码的函数也不可能在调用时展开,内联函数只能在优化程序时使用。在抽象数据类设计中,它对支持信息隐藏起主要作用。
如果某个内联函数要作为外部全局函数,即它将被多个源代码文件使用,那么就把它定义在头文件里,在每个调用该内联函数的源文件中包含该头文件,这种方法保证对每个内联函数只有一个定义,以防止在程序的生命周期中引起无意的不匹配。
例如,创建一个内联函数 IntegerAdd 并进行调用,代码如下:
#include <iostream> using namespace std; inline int IntegerAdd(int x, int y); int main() { int a; int b; int iresult=IntegerAdd(a,b); } inline int IntegerAdd(int x,int y) { return x+y; }
IntegerAdd() 函数被定义为内联函数,其在计算机中的执行过程如下:
int main() { int a; int b; int iresult= a+b; }使用内联函数可以减少函数调用带来的开销(即程序文件中移动指针寻找调用函数地址带来的开销),但它只是一种解决方案,编译器可以忽略内联的声明。
建议在函数实现代码很简短或者调用该函数次数相对较少的情况下将函数定义为内联函数,内联函数通常定义一条返回语句,不能包含循环或者 switch 语句。例如,一个递归函数不能在调用时完全展开,一个 1000 行代码的函数也不可能在调用时展开,内联函数只能在优化程序时使用。在抽象数据类设计中,它对支持信息隐藏起主要作用。
如果某个内联函数要作为外部全局函数,即它将被多个源代码文件使用,那么就把它定义在头文件里,在每个调用该内联函数的源文件中包含该头文件,这种方法保证对每个内联函数只有一个定义,以防止在程序的生命周期中引起无意的不匹配。