Maison > développement back-end > C++ > le corps du texte

Pourquoi la surcharge de fonction provoque-t-elle une erreur avec la valeur entière la plus négative ?

Susan Sarandon
Libérer: 2024-10-31 15:34:31
original
340 Les gens l'ont consulté

Why Does Function Overload Cause an Error with the Most Negative Integer Value?

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
}
Copier après la connexion

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 :

  • Utilisez std::numeric_limits pour récupérer les valeurs minimales et maximales d'un type de manière portable :
    std::numeric_limits : :min();
  • Convertir explicitement les valeurs négatives au type souhaité :
    display(static_cast(-2147483648));
  • 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!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!