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

Han*_*Sun 3 c++ arrays dimension c++11

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

unsigned cnt = 42;
int k[cnt];
Run Code Online (Sandbox Code Playgroud)

但这不会:

unsigned cnt = 42;
string bad[cnt];
Run Code Online (Sandbox Code Playgroud)

我刚刚查看了C++入门第5版.它说:

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

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

Cub*_*bbi 14

这两段代码都不适用于C++.

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

至于元素类型之间的区别,它是特定于编译器的.海湾合作委员会汇编两者.clang ++ std::string在这种情况下禁止非POD类型(例如).