458 Stimmen

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 lese diese Frage heute bin ich auf eine C-Syntax gestoßen, mit der ich nicht vertraut war.

Offensichtlich in C99 ist die folgende Syntax gültig:

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

Dies scheint eine sehr nützliche Funktion zu sein. Wurde jemals darüber diskutiert, sie in den C++-Standard aufzunehmen, und wenn ja, warum wurde sie weggelassen?

Einige mögliche Gründe:

  • Schwierig für Compiler-Anbieter zu implementieren
  • Unvereinbar mit einem anderen Teil der Norm
  • Die Funktionalitä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 in dem Spielzeugbeispiel auch std::vector<int> values(m); zu, doch wird dabei Speicher vom Heap und nicht vom Stack zugewiesen. Und wenn ich ein mehrdimensionales Array wie:

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

le site vector Version ziemlich unhandlich wird:

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

Die Slices, Zeilen und Spalten können auch über den gesamten Speicher verteilt sein.

Ein Blick auf die Diskussion unter comp.std.c++ Es ist klar, dass diese Frage sehr umstritten ist und dass es auf beiden Seiten einige sehr gewichtige Namen gibt, die sich darüber streiten. Es ist sicherlich nicht offensichtlich, dass ein std::vector ist immer eine bessere Lösung.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X