Der folgende Code wirft die Frage auf, warum MSVC keine Warnung für Gleichheitsvergleiche zwischen vorzeichenbehafteten (int) und ausgibt Ganzzahlwerte ohne Vorzeichen (unsigned int):
int a = INT_MAX; unsigned int b = UINT_MAX; bool c = false; if(a == b) // no warning expected here c = true;
Gemäß dem C-Standard beim Vergleich mit Vorzeichen und Ganzzahlen ohne Vorzeichen, der vorzeichenbehaftete Wert wird in einen vorzeichenlosen Wert konvertiert. Bei dieser Konvertierung bleibt der Wert für Gleichheitsvergleiche erhalten, da (-1 == -1) und ((unsigned)-1 == -1) wahr sind. Bei anderen Vergleichsoperatoren wie „größer als“ (>) oder „kleiner als“ (<) kann die Konvertierung jedoch zu unerwarteten Ergebnissen führen. Beispielsweise wird (-1 > 2U) als wahr ausgewertet.
MSVC-Entwickler haben spezifische Entscheidungen hinsichtlich der Warnstufen für diese verschiedenen Operatoren getroffen:
Dieser Ansatz stellt sicher, dass Warnungen für Szenarien ausgegeben werden, in denen die Konvertierung erfolgt könnte zu überraschendem Verhalten führen und gleichzeitig unnötige Warnungen für Gleichheitsvergleiche vermeiden, die das erwartete Ergebnis aufrechterhalten.
Das obige ist der detaillierte Inhalt vonWarum warnt MSVC nicht vor vorzeichenbehafteten/vorzeichenlosen Ganzzahlgleichheitsvergleichen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!