Sont des matrices de longueur variable là-bas dans C ++?
-
21-12-2019 - |
Question
J'avais toujours pensé que les tableaux de longueur variable n'étaient pas autorisés dans C ++ (voir: Pourquoi Aren 'Tareaux de longueur variable de la norme C ++? ) .Mais que ce code compile et travaille-t-il?
#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;
}
}
La solution
La norme C ++ actuelle ne nécessite pas que les compilateurs VLAS.Cependant, les fournisseurs de compilation sont autorisés à prendre en charge les VLA comme une extension.
Il a été proposé à l'origine que les VLAS apparaissent dans C ++ 14, mais la proposition n'a pas réussi.Ils peuvent revenir pour C ++ 17.
Autres conseils
C99 permet une VLA, mais C ++ ne le permet jamais, car la performance de la VLA est si hostile.Et en C11, VLA devient une fonctionnalité facultative.
Avant, on dit que la VLA apparaîtrait à C ++ 17.Mais maintenant C ++ 17 est publié et pas de VLA non plus.(Et il semble que c ++ 20 n'aura pas de VLA. Les documents récents n'en ont pas parlé du tout.)
Bien que la standard ne le supporte pas, GNU Compiler le supporte comme une extension .