再上一篇:5.3 函数的嵌套与递归调用
上一篇:5.4 作用域和存储类
主页
下一篇:5.6 具有缺省参数值和参数个数可变的函数
再下一篇:5.7 函数的重载
文章列表

5.5 内联函数

《VC++程序设计基础》,讲述C++语言的语法和标准库,以及Visual C++ 函数库和MFC类库的使用,并附相关代码示例。

程序的执行过程中要调用一个函数时,系统需要进行保护当前的现场,参数入栈等工作;然后,再转去执行被调用函数的函数体。当执行完被调函数后,要恢复现场,再接着执行函数调用后的语句或计算。当函数体比较短小时,且执行的功能比较简单时,这种函数调用方式的系统开销相对而言是比较大的。C++提供了一种解决的办法:把函数体的代码直接插入到调用处,将调用函数的方式改为顺序执行直接插入的程序代码,这样可以减少程序的执行时间。这一过程称为内联函数(inline function)的扩展。内联函数的实质是用存储空间(使用更多的存储空间)来换取时间(减少执行时间)的方法。

内联函数的定义方法是,在函数定义时,在函数的类型前增加修饰词inline。我们用例子来说明之。

例 5.11 用内联函数实现求二个实数的大值。

#include

inline float max(float x,float y)

{

return ( x>y? x:y);

}

void main(void )

{

cout << "Input A and B :";

float a,b;

cin >> a >> b;

cout << “大值是:” << max(a,b) << '\n';

}

使用内联函数时应注意以下几点:

1、C++中,除在函数体内含有循环,switch分支和复杂嵌套的if语句外,所有的函数均可定义为内联函数。

2、内联函数也要定义在前,调用在后。形参与实参之间的关系与一般的函数相同。

3、对于用户指定的内联函数,编译器是否作为内联函数来处理由编译器自行决定。说明内联函数时,只是请求编译器当出现这种函数调用时,作为内联函数的扩展来实现,而不是命令编译器要这样去做。

4、正如前面所述,内联函数的实质是采用空间换取时间,即可加速程序的执行,当出现多次调用同一内联函数时,程序本身占用的空间将有所增加。如上例中,内联函数仅调用一次时,并不增加程序占用的存储间。