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;
    }
}
.

È stato utile?

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 .

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top