类间调用inline函数的效率

时间:2023-03-09 06:00:55
类间调用inline函数的效率

问题描述:

class A

{

public:

int x, y, k, NY;

inline int f(int i, int j, int k)  {return ((i)*(NY + 1) * 9 + (j) * 9 + (k));};

int f_notInline(int i, int j, int k);

protected:

private:

};

int A::f_notInline (int i, int j, int k)

{

return ((i)*(NY + 1) * 9 + (j) * 9 + (k));

}

class B

{

public:

A Aprob;

inline int pl(int i, int j, int k) {return Aprob.f3D(i, j, k);}

inline int pl_f_notInline (int i, int j, int k) {return Aprob.f_notInline (i, j, k);}

int D::pl_notIline_f(int i, int j, int k);

protected:

private:

};

int D:: pl_notIline_f (int i, int j, int k)

{

return Aprob.f3D(i, j, k);

}

A类中定义inline函数f和普通函数f_notinline

用B类分别用以下三种形式调用:

1. B类中的inline函数pl调用A类中的inline函数f:inline int pl(int i, int j, int k) {return Aprob.f3D(i, j, k);}

用时:

类间调用inline函数的效率

2. B类中的inline函数 pl_f_notInline 调用A类中的普通函数f_notinline:inline int pl_f_notInline (int i, int j, int k) {return Aprob.f_notInline (i, j, k);}

用时:

类间调用inline函数的效率

3. B类中的普通函数 pl_notIline_f 调用A类中的inline函数f:int D::pl_notIline_f(int i, int j, int k);

用时:

类间调用inline函数的效率

结论:

类间调用inline函数时,若要保持inline函数的性质,必须在两个类中都已inline函数的形式表示。

一旦有一方不是inline的形式,就会退化成普通函数的形式调用。