Ich habe diesen Beispielcode, der den folgende Warnung (VS2008-Compiler mit SP1) erzeugt:Compilerwarnung für unäre Operation auf unsigned int
Warnung C4146: unären minus Operator in unsigned Typ angewandt, das Ergebnis immer noch unsigned
Code:
void f(int n)
{
}
int main()
{
unsigned int n1 = 9;
f(-n1);
}
Aber seit Funktion f
nimmt seinen Parameter als int
sollte dieser Code nicht ohne Warnungen kompilieren?
Siehe @ Andreas Antwort für Zitat und Definition der Förderung :) –
Das funktioniert mit dem Wert "9", aber ich denke im Allgemeinen '(int) (- (vorzeichenlose) x)' und '- (int) x' sind nicht genau gleich, denn wenn x INT_MIN ist, ist das Anwenden von Minus auf einen nicht definierten Überlauf, während das unäre Minus auf einem vorzeichenlosen Wert für alle vorzeichenlosen Werte gut definiert ist. Korrigiere mich, wenn ich falsch liege. –