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

pus*_*shE 9 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;
}
Run Code Online (Sandbox Code Playgroud)

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

Mic*_*urr 6

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

和:

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

  • 这可以解释`sizeof(B :: a)`为0.我不认为这是'sizeof(B)`为0的借口. (4认同)

Naw*_*waz 4

就 C++ 语言而言,您的代码格式不正确。特别是,该类B不应在符合 C++ 标准的编译器中进行编译。您的编译器要么有错误,要么它提供此功能作为扩展。

GCC-pedantic-errors -std=c++11给出了这个错误:

cpp.cpp:18:11: error: ISO C++ forbids zero-size array 'a' [-Wpedantic]
     int a[];
           ^
Run Code Online (Sandbox Code Playgroud)

  • @thomas:请使用“-std=c++11 -pedantic-errors”编译它,然后让我们知道。 (2认同)