• 虚函数被声明为inline时,是否真正的被inline了?


    虚函数可以被声明为inline,这是毫无疑问的,因为inline同register一样,只是对编译器的建议。

    那么inline virtual函数是否会被内联展开呢?答案是可以!

    有的人说不能,理由是virtual的意思是"等到运行时再决定调用哪个函数",inline的意思是"在编译期间将调用之处用被调函数来代替",如果编译器甚至还不知道哪个函数将被调用,当然就不能责怪它拒绝生成内联调用了。

    其实上面的观点是不正确的,如果virtual可以在编译期决定调用什么函数,那么就可以被inline!

    那么什么时候可以决定调用何种函数呢?

    用一个类对象通过成员选择符.调用虚函数,如obj.vf()
    这时虚函数vf()就可以被vc优化内联展开。这样调用等于告诉编译器你要调用的具体函数,在函数有inline修饰或是体内定义的情况下就会被内联展开。

    当然还有其他情况可以被inline,总的意思是虚函数可以申明为inline,具体到编译器解释时候,如果编译器在编译的时候就可以确定该虚函数的决议,则编译器以inline方式静态决议该虚函数。如果编译器在编译的时候不能决定,则必须在运行时决议虚函数,此时虚函数不能以inline函数的方式调用。

  • 相关阅读:
    在 Ubuntu 14.04 Chrome中安装Flash Player(转)
    Tomcat 域名绑定多个Host配置要点
    IIS7.5 与 Tomcat 8整合
    笔记本外接显示器闪屏
    NetworkManager 命令配置nmcli注意
    CentOS 7 目录布局变化
    CentOS 7 Crontab
    jquery的ajax post 方法传值到后台,无法通过HttpServletRequest得到
    没有添加spring mvc 默认依赖包产生的错误
    tcp总结
  • 原文地址:https://www.cnblogs.com/helloweworld/p/3116069.html
Copyright © 2020-2023  润新知