解析内联函数

一、什么是内联函数?为什么使用内联函数?

调用函数是需要一定的时间和空间的开销的。

上图表示函数调用的过程,1程序执行函数调用前的语句;2流程的控制转移到被调用函数的入口处,同时进行参数传递;3执行被调用函数中函数体语句;4流程返回到调用函数的下一条指令处,将函数返回值带回;5接着执行主调函数中未执行的部分。

在2执行之前,要记下当时指令的地址还要“保护现场”(记下当时有关的信息),以便在函数调用之后继续执行,流程返回到先前记下的地址处,并根据记录下的信息“恢复现场”,然后继续执行,这些都是需要一定的时间。

C++提高了一种高效的方法,在编译程序时将所调用的函数的代码直接嵌入到主调函数中,而不是将流程转出去。这种嵌入到主调函数中的函数称为“内置函数”,也叫作内联函数。

二、内联函数的使用方法

指定内联函数的方法很简单,只需要在函数首行的左端加一个关键字inline.

例:

inline int max(int a, int b)

{

return a > b ? a : b;

}

int main()

{

int ret = max(4,5);

system("pause");

return 0;

}

上面的程序中,max函数就是内联函数。注意:可以在函数的声明和定义时同时加inline,也可以只在一处声明inline.

三、什么时候使用inline?

当然使用inline也是要付出代价的,因为inline是进行代码的插入,所以无形中会增加程序的长度,因此一般将规模很小而使用频繁的函数声明为内联函数。在函数规模很小的情况下,函数调用时间的开销可能会超过执行函数本身的时间,这时把他定义为inline可大大节省程序运行时间。内联函数中不能包括复杂的语句,如循环和switch语句。要注意,对函数做inline声明,只是用户对编译系统的一个建议,编译系统会根据具体情况决定是否这样做。

四、inline成员函数

类的成员函数也可以指定为内联函数。如果类的成员函数在类内定义,在默认是内联函数,如果类的成员函数在类外定义,则需要加inline关键字显示的声明为内联函数。值得注意的是,如果在类外定义inline函数,则必须将类定义和成员函数的定义都放到同一个头文件中,否则编译时无法将函数代码拷贝到函数的调用点。只有在类外定义的成员函数规模很小而且调用频率很高时,才将此成员函数指定为内联函数。

时间: 2024-10-17 22:06:28

解析内联函数的相关文章

宏定义与内联函数

1.宏定义的规则和使用解析(1)宏定义的解析规则就是:在预处理阶段由预处理器进行替换,这个替换是原封不动的替换.(2)宏定义替换会递归进行,直到替换出来的值本身不再是一个宏为止.(3)一个正确的宏定义式子本身分为3部分:第一部分是#dedine ,第二部分是宏名 ,剩下的所有为第三部分.(4)宏可以带参数,称为带参宏.带参宏的使用和带参函数非常像,但是使用上有一些差异.在定义带参宏时,每一个参数在宏体中引用时都必须加括号,最后整体再加括号,括号缺一不可. 宏定义示例1:MAX宏,求2个数中较大的

C++自学-内联函数

内联函数是内联扩展是用来消除函数调用时的时间开销.它通常用于频繁执行的函数 如需要频繁执行某个操作,可以使用inline来进行定义. #include "stdafx.h" #include <Windows.h> #include <iostream> #include <fstream> #include <shappmgr.h> #include <stdio.h> using namespace std; inline

C++关键字、命名空间、函数重载、缺省参数、内联函数、引用

一 .C++入门 1.C++关键字 2.命名空间 3.C++输入&输出 4.缺省参数 5.函数重载 6.引用 7.内联函数 8.auto关键字 9.基于范围的for循环 10.指针空值nullptr&nullptr_t 二. 正文 1.C++关键字(C++98) C++98中的关键字总共用63个,如下表: 在这这做简单介绍,感兴趣的朋友可以参考相关资料作进一步了解. 2.命名空间 由于在编写程序的过程中,很容易出现变量.函数和类重名的现象,这些变量.函数和类都在全局作用域中,因此会导致很多

成员函数与内联函数

11.关于成员函数特征的下列描述中,______是错误的.   成员函数一定是内联函数   B. 成员函数可以重载     C. 成员函数可以设置缺省参数值   D. 成员函数可以是静态的   [A] [解析] 因为成员函数可以在类体内定义,也可以在类体外定义,所以成员函数不一定都是内联函数:成员函数可以重载,可以设置参数的默认值,成员函数可以是静态的. 内联函数是指在调用衣柜函数时,不把他当作调用而处理,而是把这个函数的代码直接在调用他的函数里展开的形式,也可以理解为内联函数就相当于一段代码.

关于C++内联函数

关于C++内联函数有以下实验: 有三段测试代码 1.手动展开内联函数. 2.非内联函数. 3.inline标记的内联函数.(函数只有一行代码,以确保函数被内联) 测试三种情况: VS工程在Release版下的有关内联的三个设置选项 1./Ob0 禁用内联展开(默认情况下是打开的). 2./Ob1 只展开标记为 inline 或 __inline 的函数,或在类声明内定义的 C++ 成员函数中的函数. 3./Ob2 展开标记为 inline 或 __inline 的函数和编译器选择的任何其他函数(

java内联函数

在说内联函数之前,先说说函数的调用过程. 调用某个函数实际上将程序执行顺序转移到该函数所存放在内存中某个地址,将函数的程序内容执行完后,再返回到  转去执行该函数前的地方.这种转移操作要求在转去前要保护现场并记忆执行的地址,转回后先要恢复现场,并按原来保  存地址继续执行.也就是通常说的压栈和出栈.因此,函数调用要有一定的时间和空间方面的开销.那么对于那些函数体  代码不是很大,又频繁调用的函数来说,这个时间和空间的消耗会很大. 那怎么解决这个性能消耗问题呢,这个时候需要引入内联函数了.内联函数

内联函数详解

什么是内联性和外联函数 类的成员函数可以分为内联函数和外联函数.内联函数是指那些定义在类体内的成员函数,即该函数的函数体放在类体内.而说明在类体内,定义在类体外的成员函数叫外联函数.外联函数的函数体在类的实现部分. 内联函数在调用时不是像一般的函数那样要转去执行被调用函数的函数体,执行完成后再转回调用函数中,执行其后语句,而是在调用函数处用内联函数体的代码来替换,这样将会节省调用开销,提高运行速度. 内联函数与前面讲过的带参数的宏定义进行一下比较,它们的代码效率是一样的,但是内联函数要优于宏定义

内联函数的定义及说明

一.什么叫inline函数? inline(小心,不是online),翻译成"内联"或"内嵌".意指:当编译器发现某段代码在调用一个内联函数时,它不是去调用该函数,而是将该函数的代码,整段插入到当前位置.这样做的好处是省去了调用的过程,加快程序运行速度.(函数的调用过程,由于有前面所说的参数入栈等操作,所以总要多占用一些时间).这样做的不好处:由于每当代码调用到内联函数,就需要在调用处直接插入一段该函数的代码,所以程序的体积将增大.拿生活现象比喻,就像电视坏了,通过

C++内联函数总结

C++内联函数 Inline函数,看起来像函数,动作像函数,没有宏的副作用,可以调用它们又没有函数调用的额外开销.多好的内联函数 实际上,获得的比想象的还要多,避免函数调用的额外开销只是它好处的一部分而已.编译器还可以通过最优化机制(被设计用来浓缩那些'不含函数调用的代码'的代码),所以当inline某个函数,编译器可能就有能力对它执行语境相关最优化. 但是函数调用会增加目标代码的大小,然而,如果inline函数的本体很小,编译器针对'函数本体'产出的代码可能比'函数调用'产生的目标代码更小.