在C++中,使用变量作为数组的维度

Use a variable as the dimension of an array in C++?

本文关键字:数组 变量 C++      更新时间:2023-10-16

我只是想知道为什么这在Clang 4.0:中有效

unsigned cnt = 42;
int k[cnt];

但这不会:

unsigned cnt = 42;
string bad[cnt];

我刚刚检查了C++初级读本第5版。上面写着:

维度必须在编译时已知,这意味着维度必须是一个常量表达式

如果这是真的,为什么int k[cnt];工作?

这两个代码段在C++中都不起作用。

然而,在C中,可以使用非常数表达式作为数组大小。一些编译器(例如,没有-pedantic选项的GCC)支持C++代码中的C特性。

至于元素类型之间的差异,它是编译器特有的。GCC编译两者。clang++在这种情况下禁止非POD类型(如std::string)。

你用的是什么编译器,我用的是gcc,const和nonconst都很好。

这不是c的问题,数组不是通过变量定义的,而是通过宏和常量表达式定义的。

这是编译器的解释问题,我怀疑它与标准有关。

clang 4.0真的是苹果xcode clang吗?我认为这实际上是3.1版本。clang提供了一个很好的解释:

warning: variable length arrays are a C99 feature
      [-Wvla-extension]
    int k[cnt];