Maison >développement back-end >C++ >Pourquoi MSVC ne met-il pas en garde contre les comparaisons d'égalité d'entiers signés/non signés ?
Le code suivant soulève la question de savoir pourquoi MSVC n'émet pas d'avertissement pour les comparaisons d'égalité entre signé (int) et valeurs entières non signées (unsigned int) :
int a = INT_MAX; unsigned int b = UINT_MAX; bool c = false; if(a == b) // no warning expected here c = true;
Selon la norme C, lors de la comparaison des valeurs signées et entiers non signés, la valeur signée est convertie en non signé. Cette conversion préserve la valeur pour les comparaisons d'égalité, car (-1 == -1) et ((unsigned)-1 == -1) sont vrais. Cependant, pour d'autres opérateurs de comparaison tels que supérieur à (>) ou inférieur à (<), la conversion peut conduire à des résultats inattendus. Par exemple, (-1 > 2U) est évalué comme vrai.
Les développeurs MSVC ont fait des choix spécifiques concernant les niveaux d'avertissement pour ces différents opérateurs :
Cette approche garantit que des avertissements sont émis pour les scénarios dans lesquels la conversion pourrait conduire à un comportement surprenant, tout en évitant les avertissements inutiles pour des comparaisons d'égalité qui maintiennent le résultat attendu.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!