在C中定义空结构体,或在C++中定义空结构体/空类时,其sizeof值是多少?
我们在GCC和VC6下作测试。测试步骤如下:
1、测试代码1
- /*代码1*/
- struct A{
- };
- class B{
- };
其测试结果为:
|
C |
C++ | |||
|
sizeof(struct A) |
sizeof(B) |
sizeof(struct A) |
sizeof(B) | |
|
gcc 3.4.5 |
0 |
|
1 |
1 |
|
VC++ 6.0 |
编译错误 |
|
1 |
1 |
2、测试代码2
- /*测试代码2*/
- struct C{
- char a[0];
- };
- class D{
- int a[0];
- };
测试结果为:
|
C |
C++ | |||
|
sizeof(struct C) |
sizeof(D) |
sizeof(struct C) |
sizeof(D) | |
|
gcc 3.4.5 |
0 |
|
0 |
0 |
|
VC++ 6.0 |
4 |
|
1 |
1 |
我们从测试结果可以看出空结构体或空类跟编译器和语言相关。
本文通过实验对比了在C与C++中,使用不同编译器(GCC和VC6)对空结构体及空类进行sizeof运算的结果。结果显示,在C中空结构体的大小通常为0,而在C++中则至少为1。此外,当结构体或类仅包含长度为0的数组成员时,其大小仍取决于编译器。

1164

被折叠的 条评论
为什么被折叠?



