今天我偶然定义了一个二维数组,其中一维的大小为0,但是我的编译器没有抱怨.我发现以下内容表明这是合法的,至少在gcc的情况下:
但是,我对这个用法有两个问题:
首先,这被认为是良好的编程习惯吗?如果是这样,那么我们何时应该在现实世界中使用它?
其次,我定义的数组是二维的,一维的0大小.这和一维情况一样吗?例如,
int s[0]
int s[0][100]
int s[100][0]
Run Code Online (Sandbox Code Playgroud)
它们在内存和编译器中都是一样的吗?
编辑:回复Greg:我使用的编译器是gcc 4.4.5.我对这个问题的意图不依赖于编译器,但是如果有任何编译器特定的怪癖也会有用:)
提前致谢!
CB *_*ley 30
在C++中,声明一个零长度的数组是非法的.因此,当您将代码绑定到特定的编译器扩展时,它通常不被认为是一种好的做法.动态大小的数组的许多用法最好用容器类替换,例如std::vector.
ISO/IEC 14882:2003 8.3.4/1:
如果存在常量表达式(5.19),则它应为整数常量表达式,其值应大于零.
但是,您可以使用动态分配零长度的数组new[].
ISO/IEC 14882:2003 5.3.4/6:
direct-new-declarator中的表达式应具有带有非负值的积分或枚举类型(3.9.1).