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

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

为了消除函数调用的时空开销,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;
}int main(){int m, n;cin>>m>>n;cout<<m<<", "<<n<<endl;swap(&m, &n);cout<<m<<", "<<n<<endl;return 0;
}

运行结果:

42 85
85, 42
85, 42

注意,要在函数定义处添加 inline 关键字,在函数声明处添加 inline 关键字虽然没有错,但这种做法是无效的,编译器会忽略函数声明处的 inline 关键字。

当编译器遇到函数调用swap(&m, &n)时,会用 swap() 函数的代码替换swap(&m, &n),同时用实参代替形参。这样,程序第 16 行就被置换成:

int temp;
temp = *(&m);
*(&m) = *(&n);
*(&n) = temp;

编译器可能会将 (&m)、(&n) 分别优化为 m、n。

由于内联函数比较短小,我们通常的做法是省略函数原型,将整个函数定义(包括函数头和函数体)放在本应该提供函数原型的地方

C++ inline内联函数详解相关推荐

  1. inline 内联函数详解 内联函数与宏定义的区别

    一.在C&C++中 一.inline 关键字用来定义一个类的内联函数,引入它的主要原因是用它替代C中表达式形式的宏定义. 表达式形式的宏定义一例: #define ExpressionName ...

  2. C++入门 “引用”,“内联函数” 详解

    目录 一.引用 1.引用的概念: 2.引用的格式: 3.引用的特性 4.取别名原则: 难点:隐式类型转换的引用 5.引用的使用场景: [1]做参数: [2]做返回值 (1)int& Count ...

  3. C++ 内联函数详解(搞清内联的本质及用法)

    目录 一.什么是内联函数 1.直观上定义: 2.更深入的思考: 二.为什么使用内联函数 1.为什么要代替部分宏定义 2.普通函数频繁调用的过程消耗栈空间 3.更深入的思考 三.内联函数和编译过程的相爱 ...

  4. c++:内联函数详解和普通函数的区别

    文章目录 前言 Ⅰ.常规函数 Ⅱ.内联函数 1.语法 2.注意 Ⅲ.选择地使用内联 思考? 前言 内联函数是c++为了提高程序的运行速度做的改进,它与普通函数区别在于: 编译器如何将它们组合到程序中. ...

  5. VC++ inline内联函数的作用解决方案

    VC++ inline内联函数的作用解决方案 __attribute__((always_inline)) attribute((always_inline))的意思是强制内联,所有加了attribu ...

  6. python3 内置函数详解

    内置函数详解 abs(x) 返回数字的绝对值,参数可以是整数或浮点数,如果参数是复数,则返回其大小. # 如果参数是复数,则返回其大小.>>> abs(-25) 25>> ...

  7. C++ inline内联函数

    C++ inline内联函数 简介 声明内联函数 定义内联函数 总结 简介 函数是一个可以重复使用的代码块,CPU 会一条一条地挨着执行其中的代码.CPU 在执行主调函数代码时如果遇到了被调函数,主调 ...

  8. c语言inline不起作用,C语言inline内联函数学习小结

    //inline(内联)函数:将普通的函数定义为inline函数,可以避免普通函数入栈出栈的开销,它是将函数内的代码直接粘贴到调用处.除此之外,它和普通函数无异. //要成为inline函数必须具备以 ...

  9. inline内联函数

    inline 内联函数和普通函数的区别: 1.inline内联函数:在编译过程中,就没有函数的调用开销了,在函数的调用点直接把函数的代码进行展开处理 2.inline 函数不再生成相应的函数符号 in ...

最新文章

  1. EIGRP注入默认路由
  2. 零基础入门CV赛事,理论结合实践
  3. 基于黄色LED反向电流的光电检测板
  4. C++实现平衡二叉树
  5. SpringMVC 课纲
  6. Xshell选中的同时把内容复制到剪贴板(还可以设置设置文本分隔符)
  7. vxworks操作系统_【7.10开播】最新自主研发工业操作系统发布会行业top来助阵,邀您共同见证(附报名)...
  8. 和我一起学 Selenium WebDriver
  9. Selenium WebDriver- 使用Frame中的HTML源码内容操作Frame
  10. javafx 推箱子小游戏object类_突破LeetCode Hard模式之《推箱子》
  11. AutoJs4.1.0实战教程---终极福利Apk
  12. 大漠插件:找图位置偏移(超出界面边界)
  13. 计算机控制理论及应用,计算机控制理论及应用.doc
  14. 熵增定律:企业和个人发展的终极规律
  15. debian 7 调整控制台分辨率
  16. DNS劫持原理,DNS劫持如何解决?
  17. 线性代数笔记——第一章行列式
  18. nova shelve 的使用
  19. 【宇麦科技】群晖NAS套件之Drive的安装与使用(一),保姆级教程来喽!
  20. ajax查询全国天气预报,使用聚合数据api接口

热门文章

  1. python逐行打印_python中逐行打印
  2. 如何获取图像的驱动_Adobe Camera Raw 12 Mac(Raw格式图像ps插件) v12.2.1.417
  3. 线程中如何使用对象_在 Flink 算子中使用多线程如何保证不丢数据?
  4. 中关村Win11 32位微软原版ISO V2021.08
  5. win7电脑浏览器证书过期的解决方法
  6. 多路RTSP-RTMP转RTMP定制版
  7. Shiro之UsernamePasswordTokenRememberMeAuthenticationTokenAuthenticationToken
  8. springboot-项目获取resources下文件的方法
  9. Spring中@Autowired和@Resource的区别
  10. 解决MongoDB Compass