Verwenden der Größe eines Arrays in einem anderen Array

8
%Vor%

Ich habe gehört, dass eine Array-Größe in C ++ ein konstanter Ausdruck sein muss. Also char q[size(p)] ist ungültig, habe ich recht? Aber ich habe keine Fehler, als ich es versuchte

%Vor%

Warum?

    
Ideone 30.09.2010, 13:48
quelle

4 Antworten

7

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:

%Vor%     
GManNickG 30.09.2010 14:07
quelle
4
  

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

versuchte      

g ++ -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

%Vor%

und dann char q[size(p)] wäre legal.

BEARBEITEN : Lesen Sie auch dies Artikel [Blog was auch immer]

    
Prasoon Saurav 30.09.2010 13:51
quelle
-1

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). "

    
Chubsdad 30.09.2010 15:23
quelle
-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

%Vor%

-Wextra aktivieren

%Vor%

Schließlich -pedantic einschalten, um das eigentliche Problem zu erkennen

%Vor%     
Arun 30.09.2010 16:09
quelle

Tags und Links