内联函数和外联函数
类的成员函数可以分为内联函数和外联函数。内联函数是指那些定义在类体内的成员函数,即该函数的函数体放在类体内。而说明在类体内,定义在类体外的成员函数叫外联函数。外联函数的函数体在类的实现部分。
内联函数在调用时不是像一般的函数那样要转去执行被调用函数的函数体,执行完成后再转回调用函数中,执行其后语句,而是在调用函数处用内联函数体的代码来替换,这样将会节省调用开销,提高运行速度。
内联函数与前面讲过的带参数的宏定义进行一下比较,它们的代码效率是一样的,但是内联函数要优于宏定义,因为内联函数遵循函数的类型和作用域规则,它与一般函数更相近,在一些编译器中,一旦关上内联扩展,将与一般函数一样进行调用,调试比较方便。
外联函数变成内联函数的方法很简单,只要在函数头前面加上关键字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 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个内联函数。
Note:
1.在内联函数内不允许用for循环语句和switch开关语句。
2.内联函数的定义必须出现在内联函数第一次被调用之前。
3.在一个文件中定义的内联函数不能在另一个文件中使用。它们通常放在头文件中共享。
4.类内部保护或是私有取值成员函数,设定为inline函数可以提高程序的执行效率。
5.可以在程序中使用 #pragma auto_inline达到禁止函数进行内联