0
#include <iostream>

class B
{
    public:
    virtual void f() {std::cout<<"HI";}
    int x;
};
class A
{
    public:
    void f() {std::cout<<"HI";}
    int x;
};

int main () {
  A a;
  B b;
  std::cout<<sizeof(a)<<" "<<sizeof(b);

  return 0;
}

输出是

4 16 

我希望它长 8 个字节 - vptr 指针。但是剩下的 4 个字节是用来做什么的呢?我发现了很多论坛帖子(都是几年前的),人们在其中讨论了 vprt 类中的对象长 4 或 8 个字节。我还检查了在线 C++ shell - 输出是一样的。

4

1 回答 1

3

似乎指向虚函数指针表的指针的大小为 8 个字节。所以 B 类与 8 个字节的边界对齐,即它有 4 个额外的填充字节。

于 2020-05-21T20:58:56.367 回答