首页 >  知识中心 >  新闻详情

内联函数的定义 内联函数是什么?

来源:朵拉利品网  |  2019-07-24 20:25:18

1, 内联函数是什么?



定义:
内联函数从源代码层看,有函数的结构,而在编译后,却不具备函数的性质。内联函数不是在调用时发生控制转移,而是在编译时将函数体嵌入在每一个调用处。编译时,类似宏替换,使用函数体替换调用处的函数名。一般在代码中用inline修饰,但是能否形成内联函数,需要看编译器对该函数定义的具体处理。
简介:
“一个函数声明[。。。]说明符声明一个内联与内联函数。内联说明符指示的实现,内联函数体替代了在调用点是首选通常的函数调用机制。一个实现不要求在调用执行此点内联替代,但是,即使这个内嵌替代省略,由7.1.2内联函数定义的其他规则,仍应得到尊重“。
注意事项:
内联函数具有一般函数的特性,它与一般函数所不同之处只在于函数调用的处理。一般函数进行调用时,要将程序执行权转到被调用函数中,然后再返回到调用它的函数中;而内联函数在调用时,是将调用表达式用内联函数体来替换。在使用内联函数时,应注意如下几点:
1. 在内联函数内不允许用循环语句和开关语句。 如果内联函数有这些语句,则编译将该函数视同普通函数那样产生函数调用代码,递归函数(自己调用自己的函数)是不能被用来做内联函数的。内联函数只适合于只有1~5行的小函数。对一个含有许多语句的大函数,函数调用和返回的开销相对来说微不足道,所以也没有必要用内联函数实现。
2. 内联函数的定义必须出现在内联函数第一次被调用之前。
3. 本栏目讲到的类结构中所有在类说明内部定义的函数是内联函数。

2, 内联函数是什么



楼主有意思,我觉得楼上的答案已经够“官方”的了么...
内联函数就是小型函数,牺牲空间来节省函数调用的开销,一般用作比较小的函数,即函数内部没有循环、开关语句等。内联函数被发明出来就是为了取代C中的宏,因为宏是单纯的替换而没有类型检查所以经常出毛病,比如:
#define MAX(a, b) (a) > (b) ? (a) : (b)
如果你在代码中这样写:
int a = 5, b = 10;
// int max = MAX(++a, b); // a自增了两次
// int max = MAX(++a, b+10); // a自增了一次
a的自增次数竟然由与其比较的数字的大小来决定!?这肯定不是你想要的结果。
所以最好的办法是这样:
template <class T>
inline T max(const T& t1, const T& t2)
{
return t1 > t2 ? t1 : t2;
}
这样的话如果你这样写:
int max = max(a, b);
其实就被替换为了:
int max = a > b ? a : b;
虽然看起来宏差不多,但是比宏多了类型检查,而且内联函数使用的是真正的函数的特性,而不是宏的function-like,模拟函数的功用。
内联函数是为频繁使用、并且过程不大的小型函数设计的,我说了它是以牺牲代码空间来节省函数调用的开销,内联函数使用不当就会造成代码膨胀,所以使用它一定要小心。
建议(书上抄的):
For function-like macros, prefer inline functions to #defines.
楼主有时间还是多看看书好,这里毕竟专家不多,而且也没多少人有太多的时间和精力来帮你解决这些基础性的问题,好好地读几本书吧,一定会让你获益匪浅的...

相关概念


函数

函数的定义:给定一个数集A,假设其中的元素为x。现对A中的元素x施加对应法则f,记作f(x),得到另一数集B。假设B中的元素为y。则y与x之间的等量关系可以用y=f(x)表示。我们把这个关系式就叫函数关系式,简称函数。函数概念含有三个要素:定义域A、值域C和对应法则f。其中核心是对应法则f,它是函数关系的本质特征。 函数(function),最早由中国清朝数学家李善兰翻译,出于其著作《代数学》。之所以这么翻译,他给出的原因是“凡此变数中函彼变数者,则此为彼之函数”,也即函数指一个量随着另一个量的变化而变化,或者说一个量中包含另一个量。函数的定义通常分为传统定义和近代定义,函数的两个定义本质是相同的,只是叙述概念的出发点不同,传统定义是从运动变化的观点出发,而近代定义是从集合、映射的观点出发。

调用

调用是将程序的执行交给其他的代码段,通常是一个子例程,同时保存必要的信息,从而使被调用段执行完毕后返回到调用点继续执行。

 
相关新闻
内联函数的好处与不足 内联函数作用是? 07-24
内联函数与外联函数的区别 内联函数和外联函数有什么区别 07-24
内联函数定义 内联函数是什么? 07-24
内联函数何时使用 c++什么时候需要使用内联函数? 07-24
内联函数是什么 内联函数是什么? 07-24
什么时候使用内联函数 c++什么时候需要使用内联函数? 07-24
内联函数的关键字为 内联函数与普通函数的区别是什么 07-24
区分内联函数 内联函数与普通函数的区别是什么 07-24
内联函数的定义必须出现在 内联函数是什么? 07-24
内联函数与重载函数 内联函数和 普通函数 宏定义的区别 07-24
相关产品
氨制冷设备配件螺杆机专用联轴器 联轴器膜片 压缩机配件联轴器 05-15
供应 LWG-3080 频率信号发生器 函数信号源 脉冲群发生器 05-21
厂家供应 太阳能工程联箱 太阳能工程联箱厂家 价格优惠 值得选购 06-01
铝合金联轴器 06-15
温州仓库笼,仓库笼规格图,联鑫源 06-22
滚筒减速机连接部件 联轴器 减速机配套联轴器 清江减速机联轴器 06-30
联讯柴油发电机零配件中心 08-23
废旧编织袋液压铡刀 鼎联 铡刀 现货报价 08-28
NL型尼龙联轴器 NL型尼龙内齿型联轴器 尼龙套 NL2/NL3/NL4/NL5... 11-28
现美插座面板 三位开关 开关插座 10A插座面板 单联双联 单控双控 11-28

大家都在看