int main()
{
int n[0];
}
上面的代码适用于Clang 4.0。
但是,http://en.cppreference.com/w/cpp/language/array说:
数组的大小必须大于零的值。
根据C ++ 17标准声明大小为0的数组是否合法?
答案 0 :(得分:10)
根据C ++ 17标准声明大小为0的数组是否合法?
不,C ++ 17中没有任何变化允许零大小的数组。根据C ++ 17草案[dcl.array]/1
在声明T D中,D的格式为
D1 [constant-expression opt ] attribute-specifier-seq opt
[...]如果存在常量表达式,则它应为std :: size_t类型的转换常量表达式,其值应大于零。[.. ]
强调我的
您在这里看到的是一个非标准的编译器扩展,允许您编译代码。
您可以使用-pedantic
编译器标志禁用这些扩展名。
答案 1 :(得分:2)
这是“合法的”只是因为它是gcc和clang的延伸。如果使用-pedantic
进行编译,那么您将看到您所做的不符合ISO C ++标准