Sono array di lunghezza variabile lì in C ++?
-
21-12-2019 - |
Domanda
Avevo sempre pensato che gli array di lunghezza variabile non fossero ammessi in c ++ (consultare: Perché Aren 'T Arrays a lunghezza variabile Parte dello standard C ++? ). Ma del perché questo codice compila e funziona?
#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;
}
}
. Soluzione
L'attuale standard C ++ non richiede che i compilatori VLas.Tuttavia, i fornitori di compilatore sono autorizzati a supportare VLAS come estensione.
È stato originariamente proposto che VLas sarebbe apparso in C ++ 14, tuttavia la proposta non ha avuto successo.Possono tornare per C ++ 17.
Altri suggerimenti
C99 Permette VLA, ma C ++ non lo consente mai, perché le prestazioni di VLA sono così scortesi.E in C11, VLA diventa una funzione opzionale.
Prima, si dice che VLa sembrerebbe a C ++ 17.Ma ora è pubblicato C ++ 17, e nessuna VLA, neanche.(E sembra che C ++ 20 non avrà VLA. I recenti documenti non ne parli affatto.)
Sebbene lo standard non lo supporta, il compilatore GNU lo supporta come un'estensione .