问一个初学者的有关问题
问一个菜鸟的问题;class A{}int _tmain(int argc, _TCHAR* argv[]){int a sizeof(A)return 0}为什么
问一个菜鸟的问题;
class A{};
int _tmain(int argc, _TCHAR* argv[])
{
int a = sizeof(A);
return 0;
}
为什么一个空类的sizeof不等于0?内存里面做了些神马?
[解决办法]空类的默认大小是1,因为要保证正确的定义对象,如果空类的大小是0,那么A a;这个语句就会出错,对象既要存在,但是又没有占用存储大小就矛盾了,所以各个编译器就干脆把空类的大小定义为1的字节,这样就不会出现上述问题了。
[解决办法]++
[解决办法]标准只要求空类的大小不能为零,不过一般编译器都设成1.
C++用不同地址来区别不同对象,如果空类大小为零,就会出现不同对象的地址相同。
A a1, a2;
if (&a1 == &a2) //- 按标准,这个条件不应该成立
还有一个很好记的解释,假如定义了一个数组 A a[10],C++中可以用sizeof(a)/sizeof(A)来求数组大小,如果sizeof(A)=0,这个用法就会出问题。
但是,有一点很奇怪,零数组的大小确实为0,这样看起来不是空类,对象大小却为0!
class B {
char m[0];
};
typedef int C[0];
这时sizeof(B)与sizeof(C)都是0.也许是因为这个缘故,C++标准不允许定义零数组,但是GCC中只给出警告,而不认为是个错误,后果自负。
[解决办法]++