码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2017-07-27 21:27:59      阅读:176      评论:0      收藏:0      [点我收藏+]

标签:line   膨胀   foo   bsp   替换   析构函数   aik   get   cout   

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

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

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

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

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

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

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

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

标签:line   膨胀   foo   bsp   替换   析构函数   aik   get   cout   

原文地址:http://www.cnblogs.com/vinke2013/p/7246894.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!