零大小的数组?

For*_*ner 1 c++ arrays size

通常我们以下列格式声明数组:

DataType array_name[SIZE];
Run Code Online (Sandbox Code Playgroud)

所以如果我尝试为例如创建0长度数组

int arr[0]; //Line#1
arr[0] = 5; //Line#2
Run Code Online (Sandbox Code Playgroud)

执行上面的代码时,我没有收到任何错误.在这种情况下,是否为单个整数分配了内存?

Alo*_*ave 7

为什么Line#1不会产生任何编译错误?
理想情况下,它应该!在本地存储上
创建大小数组不是合法代码0.
理想情况下,编译器应该向您发出错误,可能某些编译器扩展允许编译,但根据标准,这不是有效的代码-pedantic.请尝试编译.

参考:

C++ 03标准8.3.4/1:

如果_constant-expression +(5.19)存在,则它应是一个整数常量表达式,其值应大于零.

此外,
为什么Line#2不会产生任何编译错误?
因为超出已分配数组边界的写入是未定义行为.未定义的行为不需要编译器为您提供任何诊断.请注意,一旦代码显示未定义的行为,字面意思就会发生任何事情并且所有赌注都会被取消.