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

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

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

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

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

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

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

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

posted @ 2017-07-27 20:14  Nice vinke  阅读(2810)  评论(0编辑  收藏  举报