C++ 使用变量作为C+;中数组的维数+;?

C++ 使用变量作为C+;中数组的维数+;?,c++,arrays,c++11,dimension,C++,Arrays,C++11,Dimension,我只是想知道为什么这在Clang 4.0中有效: unsigned cnt = 42; int k[cnt]; 但这不会: unsigned cnt = 42; string bad[cnt]; 我刚刚检查了C++入门第五版。它说: 维度必须在编译时已知,这意味着 维度必须是常量表达式 如果这是真的,为什么intk[cnt]工作

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

unsigned cnt = 42;
int k[cnt];
但这不会:

unsigned cnt = 42;
string bad[cnt];
我刚刚检查了C++入门第五版。它说:

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


如果这是真的,为什么
intk[cnt]工作 -PoANTICTIC/<代码>选项)支持C++代码中的C特性。

至于元素类型之间的区别,它是特定于编译器的。GCC同时编译这两个文件。在这种情况下,clang++禁止使用非POD类型(例如
std::string
)。

您使用的编译器是什么,我使用的是gcc,常量和非常量都可以正常工作

这不是c语言的问题,数组不是通过变量定义的,只有宏和常量表达式


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

Clang4.0实际上是apple xcode clang吗?我认为这实际上是3.1版。叮当声本身提供了一个很好的解释:

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

const unsigned cnt=42
@AustinBrunkhorst我知道我应该使用
const
。我只是想知道为什么
intk[cnt]有效,但字符串k[cnt]
无效。。这是继承自
C
的历史问题吗?不要这样做。你想要的是(当然)
std::vector(42) sieOfs<代码>的运行时间移植。