Maison >développement back-end >C++ >Pourquoi la surcharge de fonction provoque-t-elle une erreur avec la valeur entière la plus négative ?
Erreurs de surcharge de fonctions ambiguës avec des valeurs entières négatives
Lors de la surcharge de fonctions en C, il est crucial de comprendre les exigences spécifiques et les limites des entiers négatifs littéraux. Prenons l'exemple suivant :
<code class="cpp">void display(int a) { cout << "int" << endl; } void display(unsigned a) { cout << "unsigned" << endl; } int main() { int i = -2147483648; cout << i << endl; // prints -2147483648 display(-2147483648); // compilation error }
On pourrait s'attendre à ce que toute valeur entière appelle display(int), tandis que les valeurs en dehors de la plage int seraient ambiguës. Cependant, l'erreur de compilation se produit spécifiquement lors de l'utilisation de la valeur int la plus négative, -2147483648.
Pourquoi l'erreur se produit
La clé réside dans l'absence de littéraux entiers négatifs en C. Les littéraux entiers ne peuvent pas commencer par un signe "-", ce qui signifie que -2147483648 est interprété comme l'opérateur de négation unaire appliqué à 2147483648.
Étant donné que 2147483648 dépasse la plage int, il est automatiquement promu en int long. L'ambiguïté survient lorsque display(-2147483648) est invoqué : le compilateur ne peut pas déterminer s'il doit appeler display(int) ou display(long int).
Gestion des exceptions
Ce comportement est observé lorsque le nombre négatif et sa représentation positive ont la même valeur binaire, comme avec -32768 en abrégé.
Éviter l'ambiguïté
Pour éviter toute ambiguïté , tenez compte des bonnes pratiques suivantes :
En adhérant à ces directives, vous pouvez éviter toute ambiguïté et garantir que votre code fonctionne comme prévu.
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!