为什么会是1呢?
当我没有加上int i的时候是输出1,而加上i就是4.。。不知道为什么?
#include <iostream>
using namespace std;
class A
{
public:
q();
private:
//int i;
};
int main()
{
cout < < sizeof(A) < <endl;
return 0;
}
[解决办法]
其实也可以这样理解,当class的数据成员为空的时候,接着定义了2个对象,当我访问他们的时候,根本没法区分是不同的对象,所以编译器就自动为他们安插一个char 类型的空间,使得对象在内存中配置独一无二的地址来区分是不同对象。当有成员的时候,就可以用分配的数据成员的地址,加以区分。
详见《深度探索C++对象模型》第3章
class A{
//no member data
};
A a, b;
[解决办法]
楼上的正解.根据C++对象模型:每个类对象中存放指向virtual table指针及Nonstatic data members,根据楼主的例子,(没有虚函数所以就没指向virtual table指针),如果没有i, 那么每个class A的对象都没有配置内存地址,那么就无法区别A的每个对象,所以编译器就会它分配一个字节来区别不同的对象。当有i的时候,每个A的对象都会配置独立的内存地址,楼主的机器是32位的,int型是4个字节。