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.