内联函数与外联函数的区别

 
在类的定义中规定在类体中说明的函数作为类的成员,称为成员函数。前面讲过一般的成员函数,它是根据某种类的功能的需要来定义的。又讲述了一些特殊的成员函数:构造函数、析构函数、拷贝初始化构造函数等。还有一些成员函数后面还会介绍。

成员函数除了说明和定义在类中之外,还有些什么特性,这是本节讨论的问题。

一、内联性和外联函数

类的成员函数可以分为内联函数和外联函数。内联函数是指那些定义在类体内的成员函数,即该函数的函数体放在类体内。而说明在类体内,定义在类体外的成员函数叫外联函数。外联函数的函数体在类的实现部分。

内联函数在调用时不是像一般的函数那样要转去执行被调用函数的函数体,执行完成后再转回调用函数中,执行其后语句,而是在调用函数处用内联函数体的代码来替换,这样将会节省调用开销,提高运行速度。

内联函数与前面讲过的带参数的宏定义进行一下比较,它们的代码效率是一样的,但是内联函数要优于宏定义,因为内联函数遵循函数的类型和作用域规则,它与一般函数更相近,在一些编译器中,一旦关上内联扩展,将与一般函数一样进行调用,调试比较方便。

外联函数变成内联函数的方法很简单,只要在函数头前面加上关键字 inline 就可以了。


#include <iostream>
using namespace std;
class A
{
public:
A(int x, int y) //
内联函数
{
X=x;Y=y;
}
int a() //
内联函数
{
return X;
}
int b() //
内联函数
{
return Y;
}
int c();
int d();
private:
int X,Y;
};
//inline
定义内联函数
inline int A::c()
{
return a()+b();
}
inline int A::d()
{
return c();
}

void main()
{
A m(3,5);
int I=m.d();
cout<<"d()return:"<<I<<endl;
}

输出结果:
d()return:8

说明:类 A 中,直接定义了 3 个内联函数,又使用 inline 定义了 2 个内联函数。内联函数一定要在调用之前进行定义,并且内联函数无法递归调用。

区别就在于,运行时侯的效率与定义的方法不同。
 
 
用内联取代宏定义
内联函数相对于宏定义来说,多了类型安全检查、自动类型转换等验证功能。
Assert 不是函数,而是宏。
 
关键字 inline 必须与函数定义体放在一起才能使函数成为内联,仅将 inline 放在函数声明前面不起任何作用。
如下函数 Foo 不能成为内联函数:
inline void Foo int x int y ); //inline 仅与函数声明放在一起
 
Void Foo int x int y
{
   。。。
}
 
如下函数 Foo 为内联函数:
void Foo int x int y ); //inline 仅与函数声明放在一起
 
Void Foo int x int y
{
   。。。
}
 
定义在 类声明中的成员 函数将自动成为内联函数。
以下情况不宜用内联:
1 函数体内代码比较长时,使用内联会导致内存消耗较高;
2 函数体内有循环时不宜用内联函数。
 
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值