C++中的内联函数学习

在看C++代码时,发现有inline 这个关键字,放在函数前面.  => 这种函数就是内联函数, 那么,在C++ 中,到底什么是内联函数,以及内联函数是怎么使用的呢

 通常而言,一个C/C++程序的执行过程是这样的:  你可以理解为就是一系列函数的互相调用过程.  这可以看出是一个调用链条, 这个函数调用链条的起点是main(), 也就是说,C++函数一定是从Main()函数开始的,最终自然也还是回到Main()函数。当这个Main()函数执行完(调用完所有函数), 它会返回一个值(比如 return 0). 从而结束整个C++程序

在C++中,当main函数中调用一个函数时,开销分为2部分

第1部分是调用这个函数的开销 => 函数调用本身是有开销的,有时间和空间的开销。 程序在执行一个函数前需要做一些准备工作,需要将实参,局部变量,返回地址和若干寄存器都压入栈中,然后才能执行函数体中的代码; 执行完函数体中的代码,还要清理现场, 将前面压入栈中的数据都出栈,才能接着去执行该函数后面的代码.

第2部分是这个函数本身执行的开销 => 这这个很好理解,函数执行本身,肯定是需要资源开销的

显然,这2部分会有一个balance, 如果函数体代码比较多,函数本身执行时间比较长。那么,第1部分函数调用的时间就可以忽略. 反过来说,如果函数体代码很少,就几条语句,那么相对而言,大部分的时间都会在第1部分函数调用上,这样,第1部分函数调用的开销就值得关注.

那么,为了能够消除针对第1种情况的函数调用时空开销, C++提供了一种提高效率的方法,就是在C++编译代码时,将函数调用处用函数体本身来替换函数调用。 这有点像C语言中的宏展开. 这种在函数调用处直接嵌入函数体的函数称为内联函数(Inline Function), 也叫内嵌函数/内置函数.

内联函数的写法很简单,就是在函数定义处增加inline关键字, 具体请参考下面的例子:

复制代码
#include <iostream>
using namespace std;

inline void swap(int *a, int *b)
{
    int temp;
    temp = *a;
    *a = *b;
     *b = temp;
}
复制代码

 

posted on   新西兰程序员  阅读(18)  评论(0编辑  收藏  举报

相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律
历史上的今天:
2016-07-13 转载ASP.NET MVC 和ASP.NET Web Form简单区别
2016-07-13 转载ASP.NET 状态管理Application,Session,Cookie和ViewState用法
2016-07-13 转载 asp.net中ViewState的用法详解
2016-07-13 在ASP.NET中如何运行后台任务
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

统计

点击右上角即可分享
微信分享提示