试了下sizeof类的大小,本来想着没问题吧,如下代码输出是1 2,

#include <iostream>
using namespace std;

class A1{
public:
char a;    

A1();    
~A1();
};

class B1: A1
{
    char b; //输出1 2。改成int b;后输出变成1 8了,为何?
};
void main()
{
cout << sizeof(A1) << endl;
cout << sizeof(B1) << endl;
}

但是问题来了,把子类里唯一的变量char b;改成int b;之后,输出变成1 8了,也就是说8-1=7是子类自身大小吗? 实在想不通.....

麻烦大家看下咋回事

谢谢

推荐图书

  • C++ Primer中文版(第4版)
  • More Effective C++:35个改善编程与设计的有效方法(中文版)
  • 设计模式:可复用面向对象软件的基础


1个回答

调整一下声明

class B1: A1
{
public:
int b; //声明为public
};

cout << offsetof(B1, b)<<endl;

你可以看到便宜的内存为4,所以就是8咯。看内存对齐,就用这个offsetof宏。