关闭

【C++ Primer】内联函数和外联函数

发表于:2012-7-10 10:06

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:tianshuai11    来源:51Testing软件测试网采编

  一、概念

  成员函数:在类的定义中规定在类体中说明的函数作为类的成员,称为成员函数。

  前面讲过一般的成员函数,它是根据某种类的功能的需要来定义的。又讲述了一些特殊的成员函数:构造函数、析构函数、拷贝初始化构造函数等。还有一些成员函数后面还会介绍。 成员函数除了说明和定义在类中之外,还有些什么特性,这是本节讨论的问题。

  二、内联性和外联函数

  类的成员函数可以分为内联函数和外联函数。

  1)内联函数是指那些定义在类体内的成员函数,即该函数的函数体放在类体内。

  2)外联函数是声明在类体内,定义在类体外的成员函数。外联函数的函数体在类的实现部分。

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

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

  外联函数变成内联函数的方法很简单,只要在函数头前面加上关键字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();
}

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

  输出结果:d()return:8

  说明:类A中,直接定义了3个内联函数,又使用inline定义了2个内联函数。内联函数一定要在调用之前进行定义,并且内联函数无法递归调用。区别就在于,运行时侯的效率与定义的方法不同。

  引用网络精辟结论:

  内联函数的代码编译后会直接放在调用点的函数体内,从而使得代码增大,但是效率提高了(减少了跳转,参数传递以及保存调用函数寄存器状态的过程)。

  对外联函数的调用会在调用点生成一个调用指令(在X86中是call),函数本身不会被放在调用者的函数体内,所以代码减小,但效率较低。所以一般只有当函数体较小的情况下才声明为内联函数。

《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号