位置:
首页

>

>

知识站:C ++内联函数的相关概念
时间:

C ++内联函数的概念在介绍内联函数之前,我们需要解释C ++执行普通函数时的过程。

当调用普通函数时,当执行函数调用指令时,程序将在调用函数后立即存储该指令。

将功能参数复制到堆栈中,跳转到标记该功能起点的存储单元,执行功能代码,然后再调用保存地址的指令。

下图是C ++普通函数调用的示意图:普通函数调用图现在具有普通函数,为什么我们需要内联函数?这是因为内联函数是C ++进行的改进,目的是提高程序的运行速度。

普通函数和内联函数之间的主要区别不在于编写方式,而在于C ++编译器如何将它们组合到程序中。

那么内联函数到底是什么?内联函数的编译代码是“内联”的。

与其他程序代码。

换句话说,编译器将用相应的函数代码替换函数调用。

对于内联代码,程序无需跳转到另一个位置即可执行代码。

因此,可以说内联函数比常规函数运行快得多。

以下是内联函数的操作示意图:... int main(void){cout cout“ hubbal”; cout“ hubbal” &quot ;; ... n = 2; for(int i = 0; i for(int i = 0; i)cout“出”“ hubbal”; c”; &quot ;;对于(int i = 0; i)cout“ hubb”; cout“ hubb”; "}}}}}内联函数的编写上面显示了内联函数是如何工作的,那么如何编写内联函数呢?有两种方法可供选择:在函数声明内联之前添加关键字;在函数定义之前添加关键字inline;一种常用的方法是忽略原型,并将整个定义(即函数头和所有功能代码)放置在应提供原型的位置。

平方根计算函数如下所示。

内联技术:#include内联双平方(double x){return x * x; } int main(void){使用命名空间std;加倍a,b;双c = 13.0;双a =正方形(5.0); b =平方(4.5 + 7.5); cout“ a =”,b =“”; “; Cout” c =“ cout”,csquares =“”。

&quot ;; cout“ Now c =” &quot ;; return 0;}输出结果如下:a = 25,b = 144c = 13,c的平方= 169;现在c = 14通过输出,我们可以知道内联函数与常规函数相同,并且也按值传递。

范围。

如果参数是表达式,则函数将传递表达式的值,这使内联函数的功能远远超出了C语言宏的定义。

内联和宏上面提到的内联内联是C ++功能的新增功能。

对于C语言,预处理器语句#define用于提供宏,这也是内联代码的原始实现。

下面显示了C语言宏定义的实现:#define SQUARE(X)X * X对于宏按照定义,这不是通过传递参数来实现的,而是通过文本替换来实现的:a = SQUARE(5.0); / *替换为= 5.0 * 5.0; * / b =平方(4.5 + 7.5); / *替换为b = 4.5 + 7.5 * 4.5 + 7.5; * / d =平方(c ++); / *替换为d = c ++ * c ++; * /我们可以知道上面的代码实际上只是第一个可以正常工作,而另外两个则不能获得正确的结果。

如果要获得正确的运行结果,则需要进行以下更改:#define SQUARE(X)((X)*(X))以这种方式编写可以使第二条语句的计算正确,但是这样做第三个陈述的功能出现问题。

第三条语句仍将C递增两次。

最后,给出了宏定义和内联函数的示例。

:#include #include #define SQUARE(X)((X)*(X))inline double square(double x){返回x * x; } int main(void){使用命名空间std;使用双重结果,result1;双重结果,result1;两倍a = 2.0;双c = 3.0;结果=平方(a ++); cout“结果是:”恩德尔result1 =平方(c ++); cout“ result1是:”输出结果如下:c result = 4;结果= 1 2;结束语以上是与C ++引入的内联函数的新功能相关的内容。

最后,需要注意的一件事是,当程序员将函数作为内联函数进行请求时,编译器可能无法满足此要求。

可能认为该函数太大,或者注意到该函数调用自身,因为内联函数不能递归,因此它不用作内联函数。

另外,要注意的一件事是应该有选择地使用内联函数。

如果函数执行代码的时间比处理函数的时间长

产品资料
行业信息