Has C++ Always Allowed Using A Variable for Array Size? [duplicate]

不羁的心 提交于 2019-12-20 04:18:46

问题


For some reason, in the past, I recall not being able to do something like:

int arraySize;
cin >> arraySize;

int array[arraySize];

But recently, I tried this again and its not causing any issues. I could've sworn before this was something that threw an error in my compiler (macOS Sierra, Xcode 8.1). Was anything in the language updated to allow this? - I could be entirely remembering incorrectly and this wasn't an issue before, but I'm not sure. I thought array sizes had to be defined during compilation and the user couldn't pick that (which is where you would implement a dynamic array).


回答1:


The C++ Standard does not support variable length arrays though some compilers can have their own language extensions that allow to use VLAs in a C++ program.

Thus this code snippet

int arraySize;
cin >> arraySize;

int array[arraySize];

is not C++ compliant.

Use instead the standard C++ class std::vector.

As for C then according to the C Standard implementations may conditionally support VLAs.

You can check whether an implementation supports VLAs. From the C Standard (6.10.8.3 Conditional feature macros)

1 The following macro names are conditionally defined by the implementation:

__STDC_NO_VLA__

The integer constant 1, intended to indicate that the implementation does not support variable length arrays or variably modified types.




回答2:


Was anything in the language updated to allow this

No. Variable length arrays (aka. VLAs) are a compiler specific extension.

The c++ standard never allowed this (unlike the c99 standard does so contrarily).



来源:https://stackoverflow.com/questions/40751875/has-c-always-allowed-using-a-variable-for-array-size

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!