C++ 为什么c++;?

C++ 为什么c++;?,c++,arrays,C++,Arrays,我发现在数组的声明中,我们不能像这样指定它的大小 int a[0]; 我知道,空大小数组在C++中是非法的,但是在我的代码中,允许空大小数组编译器并给出输出。p> 我的代码在这里: #include <iostream> using namespace std; int main() { int a[0]; a[0] = 10; a[1] = 20; cout<<a[0]<<endl;

我发现在数组的声明中,我们不能像这样指定它的大小

int a[0];

我知道,空大小数组在C++中是非法的,但是在我的代码中,允许空大小数组编译器并给出输出。p> 我的代码在这里:

#include <iostream>
using namespace std;

int main()
{
        int a[0];

        a[0] = 10;
        a[1] = 20;

        cout<<a[0]<<endl;
        cout<<a[1]<<endl;

        return 0;
}
联机编译器链接:

所以,我的问题是,
inta[0]
为什么允许使用GCC编译器?

请研究一下这个问题

如果它是一个好的编译器,它将捕获并发出警告。
但使用迂腐的选项,编译器可以捕捉到它。

它会发出警告,例如发出叮当声:

warning: zero size arrays are an extension [-Wzero-length-array]
这是未定义的行为:

    a[0] = 10;
    a[1] = 20;
零长度数组是gcc的扩展,为什么-您可以在此处阅读:

它们作为结构的最后一个元素非常有用,该结构实际上是可变长度对象的标头:


这实际上是C扩展,但它看起来也类似于C++,可能是为了更容易地使用使用这个扩展的C的现有结构。< /P>做代码> int A(0);a[0]=10;a[1]=20将导致焰火(UB)。OP知道这是错误的,问题是编译器为什么不引发错误。我想,答案是它不能为你做任何事;)<代码>错误:ISO C++禁止零大小数组“A”[-Wpedantic ] int A(0);<代码>最有可能是因为添加一个特殊的规则不允许它,这会增加太多的解析器复杂性,只会获得很少的收益。这是允许的,因为它是一个数组。另外请注意,对于这种类型的结构,更可移植的解决方案是一个没有大小的数组,如

a[]
。这在C99中添加:
    a[0] = 10;
    a[1] = 20;