Por que os arrays de comprimento variável não são parte do padrão C ++?

Eu não tenho usado muito o C nos últimos anos. Quando eu liessa questão hoje me deparei com alguma sintaxe C que eu não conhecia.

Aparentemente emC99 a seguinte sintaxe é válida:

void foo(int n) {
    int values[n]; //Declare a variable length array
}

Este parece ser um recurso bastante útil. Já houve alguma discussão sobre adicioná-lo ao padrão C ++ e, em caso afirmativo, por que ele foi omitido?

Algumas possíveis razões:

Peludo para fornecedores de compiladores para implementarIncompatível com alguma outra parte do padrãoFuncionalidade pode ser emulada com outras construções de C ++

O padrão C ++ afirma que o tamanho da matriz deve ser uma expressão constante (8.3.4.1).

Sim, claro que percebo que no exemplo do brinquedo pode-se usarstd::vector<int> values(m);, mas isso aloca memória do heap e não a pilha. E se eu quiser um array multidimensional como:

void foo(int x, int y, int z) {
    int values[x][y][z]; // Declare a variable length array
}

avector versão torna-se muito desajeitada:

void foo(int x, int y, int z) {
    vector< vector< vector<int> > > values( /* Really painful expression here. */);
}

As fatias, linhas e colunas também estarão potencialmente espalhadas por toda a memória.

Olhando para a discussão emcomp.std.c++ É claro que esta questão é bastante controversa com alguns nomes muito pesados ​​em ambos os lados do argumento. Certamente não é óbvio que umstd::vector é sempre uma solução melhor.

questionAnswers(13)

yourAnswerToTheQuestion