Pregunta

Siempre había pensado que las matrices de longitud variable no estaban permitidas en C ++ (consultar: ¿Por qué no?T Arrays de longitud variable Parte del estándar C ++? ). ¿Pero por qué este código compila y funciona?

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

¿Fue útil?

Solución

El estándar actual de C ++ no requiere que los compiladores VLAS.Sin embargo, los proveedores de compiladores se les permite admitir VLAS como una extensión.

Se propuso originalmente que VLAS aparecería en C ++ 14, sin embargo, la propuesta no tuvo éxito.Pueden regresar para C ++ 17.

Otros consejos

C99 Permisos VLA, pero C ++ nunca lo permite, porque el rendimiento de VLA es tan hostil.Y en C11, VLA se convierte en una característica opcional.

Antes, se dice que VLA aparecería en C ++ 17.Pero ahora se publica C ++ 17 17, y no VLA, tampoco.(Y parece que C ++ 20 no tendrá VLA. Los documentos recientes no han hablado de ello en absoluto.)

Aunque el estándar no lo admite, el compilador de GNU lo respalda como una extensión .

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top