出于某种原因,在过去,我记得无法做到这样的事情:
int arraySize;
cin >> arraySize;
int array[arraySize];
但是最近,我再次尝试了这个并没有引起任何问题。在我的编译器(macOS Sierra,Xcode 8.1)中出现错误之前,我可以发誓。语言中的任何内容都已更新以允许此操作吗? - 我可能完全记错了,这不是以前的问题,但我不确定。我认为必须在编译期间定义数组大小,并且用户无法选择(这是实现动态数组的地方)。
答案 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标准不同)。