zoukankan      html  css  js  c++  java
  • 虚函数可以是内联函数吗?

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

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

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

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

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

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

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

  • 相关阅读:
    EJB3.0
    EJB
    到底EJB是什么
    EJB到底是什么,真的那么神秘吗??
    ssh和ejb的区别
    struts2的一些小问题
    Struts2中ValueStack结构和总结
    Java 监听器
    浅谈cookie 和session 的区别
    理解Cookie和Session机制
  • 原文地址:https://www.cnblogs.com/vinke2013/p/7246894.html
Copyright © 2011-2022 走看看