这门课的大小是什么?为什么?

时间:2013-06-27 05:32:37

标签: c++ class sizeof

我有两个课程如下

class A
{

};

class B
{
    int a[];
};


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

我很熟悉空类的大小是1,但是为什么B类的大小会变成ZERO?

4 个答案:

答案 0 :(得分:6)

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

  

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

答案 1 :(得分:4)

就C ++语言而言,您的代码格式不正确。特别是,类B不应该在C ++ Standard Conformant编译器中编译。您的编译器有bug,或者它提供此功能作为扩展。

-pedantic-errors -std=c++11的GCC会出现此错误:

cpp.cpp:18:11: error: ISO C++ forbids zero-size array 'a' [-Wpedantic]
     int a[];
           ^

答案 2 :(得分:2)

空类的大小不是1.在C ++系统中, AT LEAST 1。 原因是你需要能够例如分配一个带有new的实例并且有一个非空指针指向它。

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

编译器制造商通常会默认允许使用非标准的“扩展”,并试图让你无意识地使用它们(一个偏执狂会说让你的代码不能通过其他编译器锁定你)。

答案 3 :(得分:-2)

可能是因为数组中没有元素,当你给它1个元素时,它显示4是一个整数的大小。