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;
    }
}
Foi útil?

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 .

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top