9

I have two classes as follows

class A
{

};

class B
{
    int a[];
};


int main()
{
    cout << sizeof(A) <<endl;      //outputs 1
    cout << sizeof(B) <<endl;      //outputs 0
    return 0;
}

I am familiar that size of empty class is 1,but why is the size of class B coming to be ZERO??

4

3 回答 3

6

GCC 允许零长度数组作为扩展: http: //gcc.gnu.org/onlinedocs/gcc/Zero-Length.html

和:

作为零长度数组的原始实现的一个怪癖,sizeof 的计算结果为零。

于 2013-06-27T05:40:56.957 回答
4

Your code is ill-formed as far as C++ language is concerned. In particular, the class B shouldn't compile in C++ Standard Conformant compiler. Your compiler has either bug, or it provides this feature as extension.

GCC with -pedantic-errors -std=c++11 gives this error:

cpp.cpp:18:11: error: ISO C++ forbids zero-size array 'a' [-Wpedantic]
     int a[];
           ^
于 2013-06-27T05:34:03.803 回答
2

空类的大小不是 1。在 C++ 系统中它至少是 1。原因是您需要能够分配一个实例,new并有一个指向它的非空指针。

相反,第二种情况只是无效的 C++。

编译器制造商通常会通过默认允许非标准“扩展”来获得一些自由,并试图让您无意识地使用它们(偏执狂会说通过使您的代码无法移植到其他编译器来锁定您)。

于 2013-06-27T05:43:06.920 回答