Während ich über Datentyp-Konvertierung gelesen, sah ich dieses Beispiel:In C++ können wir {} für C-Style-Casting verwenden?
void intval()
{
for (char c; cin >> c;)
cout << "the value of '" << c << "' is " << int{c} << '\n';
}
Ich weiß, dass wir mit werfen können:
int(c)
(int) c
static_cast<int>(c)
Meine Suche Ionen:
Q1: Ist int{c}
eine andere Möglichkeit zum Darstellen von Datentypen?
Q2: Nach einigen Nachforschungen im Internet weiß ich, dass C++ - Casting anders ist und der Compiler die Casting-Möglichkeit zur Kompilierzeit überprüft, aber was sind die Unterschiede zwischen 1 und 2? Und wie ist int{c}
anders, wenn es nur ein anderer Casting Weg ist?
Q3: Gibt es noch andere Möglichkeiten zum expliziten Konvertieren/Cast?
Ich dachte, dass die geschweiften Klammern mit der Initialisierung der Liste zu tun haben, siehe diese Antwort http://stackoverflow.com/a/18222927/3110529 TL; DR: Die Initialisierung der Liste erlaubt keine Verengung (§iso.8.5. 4) bedeutet, dass es unsichere Typkonvertierungen auffängt. – Dillanm
Insbesondere, wenn "d" ist ein "double" und "double" ist die gleiche Größe wie 'uint64_t',' static_cast (d) 'und' reinterpret_cast (d) 'konvertieren auf völlig unterschiedliche Weise. C-Style-Modelle haben diese Flexibilität nicht; Sie müssten eine Union oder einen Zeiger eingeben, um die Bits neu zu interpretieren. –
Davislor