内联与虚函数
大家讲道理
大家讲道理 2016-11-11 14:23:43
0
2
777
#include <iostream>

using namespace std;

class A
{
    virtual void func()
    {
        cout << "zz\n";    
    }
    virtual void prin();
};

inline void A::prin()
{
    cout << "h";
}

int main()
{
    return 0;
}

为什么inline可以修饰virtual函数呢?虚函数调用不是要在运行时才能确定吗?而inline不是要在编译时就展开吗?

大家讲道理
大家讲道理

光阴似箭催人老,日月如移越少年。

全部回覆(2)
代言

理论上说这两者应该是不共存的。但与virtual不同,inline只是编译器的优化建议,编译器并不一定会采纳inline这个建议,所以这两者书写上并存还是允许的,不过在实际编译时,inline就不会展开了。
另外我看到过一些信息,说virtual函数也有可能在编译时被确定,从而可以实现inline。不过这都是Compiler Dependent,所以也不能绝对的去说。

代言

作用非常有限,编译器通常会无视inline修饰,当然也有例外:
inline virtual只有当对象类型在编译时被确定时才会起作用,也就是调用这个inline virtual的caller不能是引用或者指针,可以是局部变量,static变量,全局变量。这个时候编译器可能会把这个virtual function优化成普通成员函数inline掉,但是否这么做取决权在编译器,不能得到保证。

熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板