虚函数可以是内联函数吗?

  虚函数是通过指针或引用调用函数时,通过虚函数表来确定调用的函数,在运行时确定。

  内联函数是在编译时,将调用函数处插入内联函数的代码,省去了函数调用时的开销。

  表面上看,虚函数不能为内联函数。我们在类中定义的函数都是内联函数,析构函数经常在类中定义,而析构函数又经常声明为虚函数,以前没有发现什么问题。

其实虚函数可以为内联函数,这与内联函数的定义没什么冲突。

  内联函数到底要不要在调用处展开取决于怎么调用内联函数。

  class A
  {

    A(){}

    ~A(){}

    virtual void foo()

    {

      cout << "A::foo" << endl;

    }

  }

  class B

  {

    virtual void foo()

    {

      cout << "B::foo" << endl;

    }

  }

  A *a = new B();

  int main()

  {

    a->foo();//不是内敛

    a->A::foo();//内联

  }

  无论显式还是隐式,inline都只是一个申请,最终由编译器决定内联还是不内联

   inline 定义的类的内联函数,函数的代码被放入符号表中,在使用时直接进行替换,(像宏一样展开),没有了调用的开销,效率也很高。

  另外要注意,内联函数一般只会用在函数内容非常简单的时候,这是因为,内联函数的代码会在任何调用它的地方展开,如果函数太复杂,代码膨胀带来的恶果很可能会大于效率的提高带来的益处。内联函数最重要的使用地方是用于类的存取函数。

时间: 2024-10-25 12:04:20

虚函数可以是内联函数吗?的相关文章

转-C++之虚函数不能定义成内联函数的原因

转自:https://blog.csdn.net/flydreamforever/article/details/61429140 在C++中,inline关键字和virtual关键字分别用来定义c++中的内联函数和虚函数,他们在各自的场合都有其各自的应用,下面将简单介绍他们各自的功能,然后在说明为什么一个函数不能同时是虚函数和内联函数(inline). 一.内联函数(inline)内联函数的目的是为了减少函数调用时间.它是把内联函数的函数体在编译器预处理的时候替换到函数调用处,这样代码运行到这

内联函数详解

什么是内联性和外联函数 类的成员函数可以分为内联函数和外联函数.内联函数是指那些定义在类体内的成员函数,即该函数的函数体放在类体内.而说明在类体内,定义在类体外的成员函数叫外联函数.外联函数的函数体在类的实现部分. 内联函数在调用时不是像一般的函数那样要转去执行被调用函数的函数体,执行完成后再转回调用函数中,执行其后语句,而是在调用函数处用内联函数体的代码来替换,这样将会节省调用开销,提高运行速度. 内联函数与前面讲过的带参数的宏定义进行一下比较,它们的代码效率是一样的,但是内联函数要优于宏定义

C++ 内联函数inline

http://blog.csdn.net/u011327981/article/details/50601800 1.  内联函数 在C++中我们通常定义以下函数来求两个整数的最大值: 复制代码 代码如下: int max(int a, int b){ return a > b ? a : b;} 为这么一个小的操作定义一个函数的好处有: ① 阅读和理解函数 max 的调用,要比读一条等价的条件表达式并解释它的含义要容易得多 ② 如果需要做任何修改,修改函数要比找出并修改每一处等价表达式容易得多

C++内联函数的使用

1.为什么要用内联函数? 在C++中我们通常定义以下函数来求两个整数的最大值: int max(int a, int b) { return a > b ? a : b; } 为这么一个小的操作定义一个函数的好处有: ① 阅读和理解函数 max 的调用,要比读一条等价的条件表达式并解释它的含义要容易得多 ② 如果需要做任何修改,修改函数要比找出并修改每一处等价表达式容易得多 ③ 使用函数可以确保统一的行为,每个测试都保证以相同的方式实现 ④ 函数可以重用,不必为其他应用程序重写代码 虽然有这么多

java内联函数

在说内联函数之前,先说说函数的调用过程. 调用某个函数实际上将程序执行顺序转移到该函数所存放在内存中某个地址,将函数的程序内容执行完后,再返回到  转去执行该函数前的地方.这种转移操作要求在转去前要保护现场并记忆执行的地址,转回后先要恢复现场,并按原来保  存地址继续执行.也就是通常说的压栈和出栈.因此,函数调用要有一定的时间和空间方面的开销.那么对于那些函数体  代码不是很大,又频繁调用的函数来说,这个时间和空间的消耗会很大. 那怎么解决这个性能消耗问题呢,这个时候需要引入内联函数了.内联函数

内联函数的定义及说明

一.什么叫inline函数? inline(小心,不是online),翻译成"内联"或"内嵌".意指:当编译器发现某段代码在调用一个内联函数时,它不是去调用该函数,而是将该函数的代码,整段插入到当前位置.这样做的好处是省去了调用的过程,加快程序运行速度.(函数的调用过程,由于有前面所说的参数入栈等操作,所以总要多占用一些时间).这样做的不好处:由于每当代码调用到内联函数,就需要在调用处直接插入一段该函数的代码,所以程序的体积将增大.拿生活现象比喻,就像电视坏了,通过

谈谈 OC 中的内联函数

内联函数 即在编译的时候将函数体替换函数调用,从而不需要将parameter,returnaddress进行push/pop stack的操作, 从而加速app的运行,然而,会增加二进制文件的大小. 疑问:内联函数和非内联函数有很大不同吗? 解答:对硬件硬性不大,但在性能上有影响. 内联函数不能保证编译时候一定是内联的,内联仅仅是告诉编译器请求内联,但编译器不一定内联. 内联函数的使用场景: OC--->结构体CGRectMake--->在快速赋值的时候就是调用了其内联函数 CG_INLINE

内联函数

一.什么叫inline函数? inline(小心,不是online),翻译成“内联”或“内嵌”.意指:当编译器发现某段代码在调用一个内联函数时,它不是去调用该函数,而是将该函数的代码,整段插入到当前位置.这样做的好处是省去了调用的过程,加快程序运行速度.(函数的调用过程,由于有前面所说的参数入栈等操作,所以总要多占用一些时间).这样做的不好处:由于每当代码调用到内联函数,就需要在调用处直接插入一段该函数的代码,所以程序的体积将增大.拿生活现象比喻,就像电视坏了,通过电话找修理工来,你会嫌慢,于是

C++引用,内联函数,函数重载二义性总结_C++

1.引用 1.1 引用的概念 C++语言中,可以定义"引用".引用定义如下: 类型名 & 引用名 = 同类型的某变量名: 例如:int n: int &r=n://r就是一个引用,可以说r的类型是int &,r引用了变量n,或者说r成为n的引用. 某个变量的引用和这个变量是一回事,相当于该变量的一个别名.请注意,定义引用时一定要将其初始化,否则编译不会通过,通常会用某个变量去初始化引用,初始化后,它就一直引用该变量,不会再引用别的变量了.也可以用一个引用去初始化