理论教育 C++中的内联函数:限制和适用范围

C++中的内联函数:限制和适用范围

时间:2023-10-25 理论教育 版权反馈
【摘要】:在C++中,内联函数中不能含有复杂的结构控制语句,如循环语句、switch语句。因此,内联函数只适合于函数体只有1~5行语句的小函数。另外,递归函数也是不能被用来做内联函数的。

C++中的内联函数:限制和适用范围

1.内联函数的定义

使用函数有利于代码重用,可以提高开发效率,增强程序的可靠性,也便于分工合作和修改维护。但是,函数调用是将程序执行顺序转移到函数所存放在内存中的某个地址,将函数的程序执行完后,再返回到调用该函数处。这种转移操作需要建立栈内存环境,进行参数传递,这些工作都需要一些时间开销,将影响程序的执行效率。特别是对一些函数体代码较少,但又频繁被调用的函数来讲,解决其效率问题更为重要。C++引入内联函数就是为了解决函数调用的效率问题。

内联函数的定义方法是在函数定义时在函数类型之前加上关键字inline,即:

程序在编译时,首先将程序中出现的内联函数调用表达式用内联函数的函数体替代,即将被调函数的函数体中的代码替代到主调函数中,这样,就不会产生程序调用时的转移、恢复等问题,但会增加程序代码的长度

在C++中,内联函数中不能含有复杂的结构控制语句,如循环语句、switch语句。如果内联函数中有这些语句,则在编译时将按普通函数的调用来处理。因此,内联函数只适合于函数体只有1~5行语句的小函数。另外,递归函数也是不能被用来做内联函数的。

【例1.8】计算公式12 +22 +32 +…+102 的和。

将函数square(int x)声明为内联函数后,编译器看到inline后,为该函数创建一段代码,以后每次调用该函数时都以相应的代码来替换。(www.daowen.com)

2.先声明后调用

内联函数必须在被调用之前声明或定义。这是因为内联函数的代码必须在被替代之前就已经生成被替代的代码。因此,当一个内联函数在被调用之前做函数原型声明,在被调用之后定义,则在声明内联函数原型时需要带inline关键字,在定义内联函数时关键字inline有或无都是等价的。

例1.8中square函数的原型声明为:

inline int square(int x);

此时,square函数的定义可以是:

也可以是:

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈