在C ++ 17中声明一个大小为0的数组是否合法?

时间:2017-04-13 16:21:16

标签: c++ arrays standards c++17

int main()
{
    int n[0];   
}

上面的代码适用于Clang 4.0。

但是,http://en.cppreference.com/w/cpp/language/array说:

  

数组的大小必须大于零的值。

根据C ++ 17标准声明大小为0的数组是否合法?

2 个答案:

答案 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 ++标准