Typo auf Msdn Seite „C ++ Konstante Ausdrücke“?
-
12-10-2019 - |
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?
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 undsizeof
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.