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


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

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

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

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

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

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

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

  • 相关阅读:
    test
    dd 命令 sd卡系统迁移
    关于庖丁分词
    Linux source命令
    Linux系统查看系统是32位还是64位方法总结 in 创新实训
    总结这两天连续干掉的bug In 创新实训 智能自然语言交流系
    穷举法应用——搬砖块
    判断素数类问题汇总
    统计计算学生成绩类问题汇总
    C语言简明数据类型指南
  • 原文地址:https://www.cnblogs.com/helloweworld/p/3116069.html
Copyright © 2020-2023  润新知