问题描述:
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);}
用时:
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);}
用时:
3. B类中的普通函数 pl_notIline_f 调用A类中的inline函数f:int D::pl_notIline_f(int i, int j, int k);
用时:
结论:
类间调用inline函数时,若要保持inline函数的性质,必须在两个类中都已inline函数的形式表示。
一旦有一方不是inline的形式,就会退化成普通函数的形式调用。