Wie sagt Prasoon , ist es kein konstanter Ausdruck. Fürs Erste können Sie einen konstanten Ausdruck der Größe eines Arrays wie folgt erhalten:
%Vor% Erklärung hier . Sie kodieren im Grunde die Größe des Arrays in die Größe eines Typs und erhalten dann die sizeof
dieses Typs, die Ihnen folgendes gibt:
Ich habe gehört, dass eine Array-Größe in C ++ ein konstanter Ausdruck sein muss.
Korrigieren
So char q [Größe (p)] ist ungültig, habe ich Recht?
Laut ISO C ++, ja!
Aber ich habe keine Fehler, als ich
versuchteg ++ -Wallsizeofarray.cpp
Das liegt daran, dass g ++ VLA ( Array variabler Länge ) als Erweiterung unterstützt.
In C++0x
gibt es die Funktion constexpr
mit der Hilfe von denen Sie schreiben können
und dann char q[size(p)]
wäre legal.
BEARBEITEN : Lesen Sie auch dies Artikel [Blog was auch immer]
Ich bitte, mich mit allen Antworten hier zu unterscheiden. Die Code-Show ist völlig in Ordnung, außer für ein kleines Problem (das ist definitiv nicht VLA)
%Vor%Ich habe mich gefragt, ob das Ergebnis von sizeof immer ein const-Wert ist und daher sollte der Code in Ordnung sein.
Der obige Code baut auf VS 2010 und Comeau (strict mode)
auf$ 5.3.3 / 6- "Das Ergebnis ist eine Konstante von Geben Sie size_t ein. [Anmerkung: size_t ist definiert in der Standardkopfzeile (18.1). "
Ich benutze g ++ 4.4.3 und habe den folgenden Alias, so dass ich nie vergessen werde, die Warnungen zu aktivieren:
%Vor%Wenn dies mit dem obigen Befehl kompiliert wird, gibt es einige Warnungen. Die folgenden Schritte zeigen, wie verschiedene Optionen unterschiedliche Warnungen anzeigen.
Beim Kompilieren ohne Warnoption wird keine Warnung angezeigt
%Vor% -Wall
aktivieren
-Wextra
aktivieren
Schließlich -pedantic
einschalten, um das eigentliche Problem zu erkennen