自学内容网 自学内容网

C++ 内联函数

一、内联函数

函数是一个可以重复使用的代码块,CPU 会一条一条地挨着执行其中的代码。CPU 在执行主调函数代码时如果遇到了被调函数,主调函数就会暂停,CPU 转而执行被调函数的代码;被调函数执行完毕后再返回到主调函数,主调函数根据刚才的状态继续往下执行。

一个 C/C++程序的执行过程可以认为是多个函数之间的相互调用过程,它们形成了一个或简单或复杂的调用链条,这个链条的起点是 main(),终点也是 main()。当 main() 调用完了所有的函数,它会返回一个值(例如return 0;)来结束自己的生命,从而结束整个程序。

函数调用是有时间和空间开销的。程序在执行一个函数之前需要做一些准备工作,要将实参、局部变量、返回地址以及若干寄存器都压入栈中,然后才能执行函数体中的代码;函数体中的代码执行完毕后还要清理现场,将之前压入栈中的数据都出栈,才能接着执行函数调用位置以后的代码。

如果函数体代码比较多,需要较长的执行时间,那么函数调用机制占用的时间可以忽略;如果函数只有一两条语句,那么大部分的时间都会花费在函数调用机制上,这种时间开销就就不容忽视。

为了消除函数调用的时空开销,C++ 提供一种提高效率的方法,即在编译时将函数调用处用函数体替换,类似于C语言中的宏展开。这种在函数调用处直接嵌入函数体的函数称为内联函数(Inline Function),又称内嵌函数或者内置函数。

inline int add(int a, int b) {
    return a + b;
}

二、内联函数的作用

  • 提高程序执行效率:对于一些功能简单、代码短小且被频繁调用的函数,使用内联函数可以减少函数调用的开销。因为每次函数调用都需要进行一系列的操作,如保存当前函数的上下文、参数传递、跳转到函数地址执行、返回结果等,而内联函数直接将代码展开在调用处,避免了这些额外的开销,从而提高程序的运行速度。
  • 增强代码的可读性:内联函数将函数体直接嵌入到调用处,使得代码的逻辑更加清晰,尤其是对于一些简单的操作,阅读代码的人可以直接看到函数的具体实现,而不需要跳转到函数定义处去查看。

三、内联函数与普通函数的区别

内联函数普通函数
函数调用方式在编译时将函数体直接插入到调用处,不进行函数调用的常规操作通过函数调用指令,在运行时跳转到函数地址执行,执行完毕后返回调用处
执行效率对于短小简单且频繁调用的函数,可减少函数调用开销,提高执行效率每次调用都有额外的开销,如压栈、跳转等,相对效率较低,但对于复杂逻辑或不频繁调用的函数影响不大
代码膨胀函数体被多次插入到调用处,可能导致代码体积增大只有一份函数代码,无论被调用多少次,代码体积不变
适用场景函数体短小简单、执行频繁的情况,如获取和设置类的成员变量的简单操作等函数体复杂、执行不频繁,或者函数体较大的情况

四、内联函数的定义和使用方法

  • 定义内联函数:如前文所述,在函数声明或定义前加上关键字inline即可定义一个内联函数。既可以在函数声明时添加inline关键字,也可以在函数定义时添加,例如:
// 函数声明为内联函数
inline int max(int a, int b); 

// 函数定义为内联函数
inline int max(int a, int b) {
    return (a > b)? a : b;
}

调用

int main() {
    int num1 = 5, num2 = 10;
    int result = max(num1, num2);
    return 0;
}

 

 

 


原文地址:https://blog.csdn.net/2301_77891039/article/details/143838494

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!