C ++ 0x wird den folgenden Code und ähnlichen Code falsch formulieren, da eine sogenannte Verengungskonvertierung von a double
in a erforderlich ist int
.
int a[] = { 1.0 };
Ich frage mich, ob diese Art der Initialisierung im Code der realen Welt häufig verwendet wird. Wie viele Codes werden durch diese Änderung beschädigt? Ist es sehr aufwendig, dies in Ihrem Code zu beheben, wenn Ihr Code überhaupt betroffen ist?
Als Referenz siehe 8.5.4 / 6 von n3225
Eine Verengungskonvertierung ist eine implizite Konvertierung
- von einem Gleitkommatyp zu einem ganzzahligen Typ oder
- von long double zu double oder float oder von double zu float, außer wenn die Quelle ein konstanter Ausdruck ist und der tatsächliche Wert nach der Konvertierung innerhalb des Wertebereichs liegt, der dargestellt werden kann (auch wenn er nicht genau dargestellt werden kann), oder
- von einem Integer-Typ oder einem Aufzählungstyp ohne Gültigkeitsbereich zu einem Fließkomma-Typ, außer wenn die Quelle ein konstanter Ausdruck ist und der tatsächliche Wert nach der Konvertierung in den Zieltyp passt und den ursprünglichen Wert erzeugt, wenn er zurück in den ursprünglichen Typ konvertiert wird, oder
- Von einem Integer-Typ oder einem Aufzählungstyp ohne Gültigkeitsbereich zu einem Integer-Typ, der nicht alle Werte des Originaltyps darstellen kann, es sei denn, die Quelle ist ein konstanter Ausdruck und der tatsächliche Wert nach der Konvertierung passt in den Zieltyp und erzeugt den Originalwert, wenn zurück zum ursprünglichen Typ konvertiert.