Existem matrizes de comprimento variável em c++?
-
21-12-2019 - |
Pergunta
Sempre pensei que matrizes de comprimento variável não eram permitidas em c++(Consulte:Por que as matrizes de comprimento variável não fazem parte do padrão C++?) .Mas por que esse código compila e 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;
}
}
Solução
O padrão C ++ atual não requer que os compiladores vlas.No entanto, os fornecedores do compilador podem suportar VLAs como uma extensão.
Foi originalmente proposto que a VLAs aparecesse em C ++ 14, no entanto, a proposta não foi bem-sucedida.Eles podem retornar para C ++ 17.
Outras dicas
C99 permite que o VLA, mas C ++ nunca permite que, porque o desempenho do VLA é tão hostil.E no C11, o VLA se torna um recurso opcional.
Antes, é dito que o VLA apareceria no C ++ 17.Mas agora C ++ 17 é publicado e nenhum VLA também.(E parece que C ++ 20 não terá VLA. Os documentos recentes não falam sobre isso.)
Embora o padrão não o suporte, o compilador GNU suporta-o como uma extensão .