virtual 关键字如何影响内存位置?

问题描述

我之前有一个工作面试,被问到以下代码的输出是什么:

struct A {
    int data[2];
    A(int x,int y) { data[0] = x; data[1] = y; }

    virtual void f() {}
};

int main(){
    A a(22,33);
    int* data = (int*)&a;
    cout << data[2] << endl;
}

我已经讨论过了,但无法完全弄清楚。他提到虚函数是一个提示。之后我编译它并得到输出:

22

然后我想到了虚函数并将其删除:

struct A {
    int data[2];
    A(int x,int y) { data[0] = x; data[1] = y; }

    //virtual void f() {}
};

int main(){
    A a(22,33);
    int* data = (int*)&a;
    cout << data[2] << endl;
}

导致输出:

0

我的问题是:看似无关紧要的虚函数调用如何影响结果对象的内存布局从而导致这种情况?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)