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

时间:2013-02-10 04:35:55

标签: c++ arrays c++11 dimension

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

unsigned cnt = 42;
int k[cnt];

但这不会:

unsigned cnt = 42;
string bad[cnt];

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

  

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

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

3 个答案:

答案 0 :(得分:14)

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

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

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

答案 1 :(得分:0)

你使用什么编译器,我使用的是gcc,const和nonconst都可以正常工作。

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

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

答案 2 :(得分:0)

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

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