C++ 标准要求所有类型的大小至少为 1 个字节,即使结构没有成员也是如此。IE
struct x { };
但
sizeof(x) == 1
数组也是如此。声明零长度数组不符合标准(在 C、C++ 和 C99 中)。
int x[0]; // not allowed in C, C++ and C99 standards
那为什么呢?对我来说,这似乎是一个不必要的要求,实际上引入了不一致。
我知道一些编译器允许零长度数组作为扩展,而且 C99 允许在结构末尾使用“零”长度数组,但它更像是一个可变长度数组,并且只能在结构的末尾使用。
所以我的问题是:在语言标准中禁止使用零长度数组或要求 sizeof > 0 的原因是什么?