Heim >Backend-Entwicklung >Golang >Warum verursacht die direkte Konvertierung einer uint8-Konstante in int8 einen Kompilierungsfehler, funktioniert aber, wenn die Konvertierung nach der Zuweisung erfolgt?
Verwirrung über die Konvertierung von uint8 in int8
Frage:
Der folgende Code versucht eine Konvertierung eine uint8-Konstante in eine int8-Konstante umwandelt, aber ein Kompilierungsfehler auftritt:
<code class="go">package main func main() { a := int8(0xfc) // compile error: constant 252 overflows int8 _ = a }</code>
Andererseits löst der folgende Code den Fehler nicht aus, wenn Sie die Typkonvertierung nach der Zuweisung verschieben:
<code class="go">package main func main() { a := 0xfc b := int8(a) // ok _ = b }</code>
Was ist der Unterschied zwischen diesen beiden Codes? Warum gibt der erste Code außerdem einen Kompilierungsfehler aus?
Antwort:
Im ersten Code wird die Konstante 0xfc vor der Konvertierung in den Typ int8 ausgewertet. 0xfc ist ein Wert, der in uint8 passt, aber nicht in int8. Daher generiert der Compiler den Fehler „constant 252 overflows int8“.
Im zweiten Code erfolgt die Typkonvertierung nach der Zuweisung. Dadurch wird a als uint8-Typ ausgewertet und dann in einen int8-Typ konvertiert. Daher tritt kein Fehler auf.
Schlussfolgerung:
Wenn Sie uint8 in int8 konvertieren möchten, müssen Sie vor der Konvertierung sicherstellen, dass der Wert der Konstante innerhalb des Bereichs von int8 liegt. Andernfalls tritt ein Kompilierungsfehler auf.
Das obige ist der detaillierte Inhalt vonWarum verursacht die direkte Konvertierung einer uint8-Konstante in int8 einen Kompilierungsfehler, funktioniert aber, wenn die Konvertierung nach der Zuweisung erfolgt?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!