zoukankan      html  css  js  c++  java
  • 虚函数被声明为inline时,是否真正的被inline了?

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

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

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

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

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

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

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

  • 相关阅读:
    前端构建工具——Gulp
    jQuery事件命名空间
    浏览器类型鉴别那些事
    花式秀Mac——Mac快捷操作整理ing……
    解构jQuery之jQuery整体架构
    立即调用表达式
    iScroll小计
    JSONP原理及jQuery中的使用
    同源策略和跨域方法
    WebStrom、Sublime Text快捷键及使用技巧(补充ing...)
  • 原文地址:https://www.cnblogs.com/helloweworld/p/3116069.html
Copyright © 2011-2022 走看看