Ich habe versucht, den Bool-Wert zusammenzusetzen, sagen wir:
bool i = 0, j = 0, k = 0;
cout << sizeof(i + j + k) << endl;
Das Ergebnis ist 4, was bedeutet, dass das Ergebnis in einen 'int' Wert umgewandelt wird.
Ich möchte fragen: Ist das eine C / C ++ Standardoperation? garantiert der Compiler immer, dass der temporäre Wert bei Überlauf in einen größeren Typ konvertiert wird? Danke!
Danke für die Antworten, eine weitere Frage: sag, wenn ich das tue: %Code% %Code% Das Ergebnis ist 4. Warum wurde es auf "int" hochgestuft?
Es ist nicht der Überlauf, der die Umwandlung verursacht, es ist die Tatsache, dass Sie überhaupt arithmetisch waren. In C ++ (und C, woher das Verhalten stammt) durchlaufen die Operanden der arithmetischen Grundoperatoren für integrierte Typen eine Reihe von klar definierten Aktionen, bevor die Berechnung durchgeführt wird. Die einfachste dieser Regeln (etwas vereinfacht) besteht darin, dass jeder Typ, der kleiner als int
ist, auf int
hochgestuft wird.
Ihre Folgefrage hat dieselbe Antwort - Ihr short
ist kleiner als ein int
, also wird sie vor dem Hinzufügen zu einem int
befördert.
Diese StackOverflow-Frage enthält mehrere Antworten, in denen die Werbeaktionen beschrieben werden mehr Details.
Erstens sagt sizeof
Ihnen nicht, dass das Ergebnis in einen int
-Wert konvertiert wird. Es ist erlaubt und in der Tat nicht ungewöhnlich, dass bool
dieselbe Größe wie int
hat.
Allerdings erhalten Sie hier tatsächlich int
, aber das hat nichts mit den Werten zu tun (der Typ kann nicht von den Werten abhängen, weil die Werte im Allgemeinen erst zur Laufzeit bekannt sind, während der Typ beim Kompilieren bestimmt werden muss) Zeit).
Vor dem Hinzufügen werden die bool
-Werte auf int
hochgestuft, weil bool
als Integer-Typ definiert ist und Integer-Typen, die kleiner als int
all sind, hochgestuft werden zu int
. Sie fügen dann drei int
-Werte hinzu (eine Operation, die nicht überläuft, unabhängig davon, welche bool
-Werte Sie verwenden, weil INT_MAX
garantiert größer als 3 ist).
Tags und Links c++