Dlaczego tablice o zmiennej długości nie są częścią standardu C ++?

Przez ostatnie kilka lat nie używałem C bardzo. Gdy czytamto pytanie dziś natknąłem się na składnię C, z którą nie byłem zaznajomiony.

Najwyraźniej wC99 poprawna jest następująca składnia:

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

Wygląda to na całkiem przydatną funkcję. Czy kiedykolwiek dyskutowano o dodaniu go do standardu C ++, a jeśli tak, to dlaczego został pominięty?

Niektóre potencjalne powody:

Włochaty dla dostawców kompilatorów do wdrożeniaNiezgodny z jakąś inną częścią standarduFunkcjonalność można emulować za pomocą innych konstrukcji C ++

Standard C ++ stwierdza, że ​​rozmiar tablicy musi być stałym wyrażeniem (8.3.4.1).

Tak, oczywiście zdaję sobie sprawę, że w zabawkowym przykładzie można go użyćstd::vector<int> values(m);, ale to przydziela pamięć ze sterty, a nie stosu. A jeśli chcę wielowymiarową tablicę, taką jak:

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

vector wersja staje się dość niezdarna:

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

Plasterki, wiersze i kolumny będą również potencjalnie rozłożone w całej pamięci.

Patrząc na dyskusję wcomp.std.c++ jasne jest, że to pytanie jest dość kontrowersyjne, ponieważ niektóre bardzo ciężkie nazwiska po obu stronach argumentu. Z pewnością nie jest oczywiste, że astd::vector zawsze jest lepszym rozwiązaniem.

questionAnswers(13)

yourAnswerToTheQuestion