是否始终允许C ++使用变量进行数组大小?

时间:2016-11-22 21:22:31

标签: c++ arrays dynamic size

出于某种原因,在过去,我记得无法做到这样的事情:

int arraySize;
cin >> arraySize;

int array[arraySize];

但是最近,我再次尝试了这个并没有引起任何问题。在我的编译器(macOS Sierra,Xcode 8.1)中出现错误之前,我可以发誓。语言中的任何内容都已更新以允许此操作吗? - 我可能完全记错了,这不是以前的问题,但我不确定。我认为必须在编译期间定义数组大小,并且用户无法选择(这是实现动态数组的地方)。

2 个答案:

答案 0 :(得分:17)

C ++标准不支持变长数组,尽管某些编译器可以拥有自己的语言扩展,允许在C ++程序中使用VLA。

因此这段代码片段

int arraySize;
cin >> arraySize;

int array[arraySize];

不符合C ++。

使用标准C ++类std::vector

对于C,那么根据C标准实现可能有条件地支持VLA。

您可以检查实现是否支持VLA。 从C标准(6.10.8.3条件特征宏)

  

1以下宏名称由条件定义   实现:

__STDC_NO_VLA__

  

整数常量1,用于表示执行   不支持可变长度数组或可变修改类型。

答案 1 :(得分:8)

  

语言中的任何内容都已更新以允许此

没有。可变长度数组(也称为VLA)是特定于编译器的扩展。

c ++标准从未允许这样做(与c99标准不同)。