Warum sind Arrays mit variabler Länge nicht Teil des C ++ - Standards?
Ich habe C in den letzten Jahren nicht sehr oft benutzt. Wenn ich lesediese Frage Heute bin ich auf eine C-Syntax gestoßen, mit der ich nicht vertraut war.
Anscheinend inC99 Die folgende Syntax ist gültig:
void foo(int n) {
int values[n]; //Declare a variable length array
}
Dies scheint eine ziemlich nützliche Funktion zu sein. Gab es jemals eine Diskussion darüber, es dem C ++ - Standard hinzuzufügen, und wenn ja, warum wurde es weggelassen?
Einige mögliche Gründe:
Haarig für Compiler-Anbieter zu implementierenInkompatibel mit einem anderen Teil der NormFunktionalität kann mit anderen C ++ - Konstrukten emuliert werdenDer C ++ - Standard besagt, dass die Arraygröße ein konstanter Ausdruck sein muss (8.3.4.1).
Ja, natürlich ist mir klar, dass man im Spielzeugbeispiel verwenden könntestd::vector<int> values(m);
Dies reserviert jedoch Speicher vom Heap und nicht vom Stack. Und wenn ich ein mehrdimensionales Array wie folgt haben möchte:
void foo(int x, int y, int z) {
int values[x][y][z]; // Declare a variable length array
}
dasvector
Version wird ziemlich ungeschickt:
void foo(int x, int y, int z) {
vector< vector< vector<int> > > values( /* Really painful expression here. */);
}
Die Segmente, Zeilen und Spalten sind möglicherweise auch über den gesamten Speicher verteilt.
Schaut euch die Diskussion ancomp.std.c++
Es ist klar, dass diese Frage mit einigen sehr schweren Namen auf beiden Seiten des Arguments ziemlich kontrovers ist. Es ist sicher nicht offensichtlich, dass astd::vector
ist immer eine bessere lösung.