¿Son las matrices de longitud variable allí en C ++?
-
21-12-2019 - |
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;
}
}
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 .