Konvertierungen in C ++ 0x einschränken. Ist es nur ich, oder klingt das wie eine bahnbrechende Veränderung?

C++0x geht um den folgenden code und ähnlichen code schlecht ausgebildet, denn es erfordert eine so genannte einschränkende Konvertierung einer double zu einem int.

int a[] = { 1.0 };

Frage ich mich, ob diese Art der Initialisierung ist sehr viel in der realen Welt code. Wie viele code gebrochen werden, sind von dieser änderung? Ist es viel Aufwand dies zu beheben in Ihrem code, wenn Ihr code betroffen ist?


Referenz, siehe 8.5.4/6 n3225

Eine einschränkende Konvertierung ist eine implizite Konvertierung

  • von einem Gleitkomma-Typ in einen ganzzahligen Typ oder
  • von long double nach double oder float, oder double zu float, außer wo die Quelle ist ein konstanter Ausdruck und dem tatsächlichen Wert nach der Konvertierung ist innerhalb des Bereichs der Werte, die dargestellt werden können (auch wenn es nicht exakt dargestellt werden), oder
  • von einem integer-Typ oder ohne bereichseinschränkung enumeration-type floating-point-Typ, außer wo die Quelle ist ein konstanter Ausdruck und dem tatsächlichen Wert nach der Konvertierung passen in den target-Typ und produzieren den ursprünglichen Wert nach der Konvertierung zurück zu dem ursprünglichen Typ, oder
  • von einem integer-Typ oder ohne bereichseinschränkung enumeration-Typ in einen integer-Typ, der kann nicht repräsentieren alle Werte des ursprünglichen Typs, außer wo die Quelle ist ein konstanter Ausdruck und dem tatsächlichen Wert nach der Konvertierung passen in den target-Typ und produzieren den ursprünglichen Wert nach der Konvertierung zurück zu dem ursprünglichen Typ.

InformationsquelleAutor der Frage Johannes Schaub - litb | 2010-12-13

Schreibe einen Kommentar