I had always thought that variable length arrays were not allowed in c++(Refer :Why aren't variable-length arrays part of the C++ standard?) .But than why does this code compile and work?
#include <iostream>
using namespace std;
int main () {
int n;
cin >> n;
int a[n];
for (int i=0; i<n; i++) {
a[i] = i;
}
for (int i=0; i<n; i++) {
cout << a[i] << endl;
}
}
The current C++ standard does not require that compilers VLAs. However, compiler vendors are permitted to support VLAs as an extension.
It was originally proposed that VLAs would appear in C++14, however the proposal did not succeed. They may return for C++17.
C99 permits VLA, but C++ never permits that, because the performance of VLA is so unfriendly. And in C11, VLA becomes an optional feature.
Before, it's said that VLA would appear at C++17. But now C++17 is published, and no VLA, either. (And it seems C++20 won't have VLA. The recent documents haven't talk about it at all.)
Although the standard doesn't support it, GNU compiler supports it as an extension.
来源:https://stackoverflow.com/questions/22013444/are-variable-length-arrays-there-in-c