读书人

为什么会是1呢?解决方法

发布时间: 2012-03-14 12:01:12 作者: rapoo

为什么会是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个字节。

读书人网 >C++

热点推荐