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 werden

Der 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.

Antworten auf die Frage(13)

Ihre Antwort auf die Frage