Frage

Sie sagt unter Msdn Seite für c ++ konstante Ausdrücke dass:

nicht ganzzahligen Konstanten müssen (Umgerechnet entweder explizit oder implizit) zu integralen Typen zu sein legal in einem konstanten Ausdruck. Daher ist der folgende Code Rechts:

const double Size = 11.0;
char chArray[(int)Size];

Mindestens auf VC ++ 10.0 die zweite Zeile erzeugt: „Fehler C2057: erwartete konstanten Ausdruck“. So ist es legal auf einem anderen Compiler oder die MSDN-Seite einfach falsch?

War es hilfreich?

Lösung

Nach 5.19 / 1:

Ein integraler konstanter Ausdruck Dose betreffen nur Literale (2.13), Aufzählungen, const Variablen oder statische Datenelemente von integralen oder Aufzählungstypen initialisiert mit konstante Ausdrücke (8,5), nicht-Typ Template-Parameter von integralen oder Aufzählungstypen und sizeof Ausdrücke. Schwimm Literale (2.13.3) kann nur dann angezeigt, wenn sie gieße Integral- oder Aufzählungs Typen .

Von meinem den Code zu verstehen, ist ungültig, während die folgende Recht ist:

char chArray[(int)11.0];

Andere Tipps

Das ist nicht legal nach Standard C ++. Siehe 5.19 / 2 für die Regeln in der spec.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top