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

Pourquoi la surcharge de fonctions devient-elle ambiguë avec l'entier le plus négatif en C ?

Susan Sarandon
Libérer: 2024-11-01 13:41:29
original
481 Les gens l'ont consulté

Why Does Function Overloading Become Ambiguous with the Most Negative Integer in C  ?

Ambiguïté de surcharge de fonctions avec l'entier le plus négatif

En C, la surcharge de fonctions autorise plusieurs fonctions portant le même nom mais des listes de paramètres différentes. Cependant, la rencontre de la valeur entière la plus négative peut entraîner une erreur d'ambiguïté en raison de conversions de type implicites.

Comprendre le problème

L'extrait de code suivant illustre le problème :

<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); // error: ambiguous function call
}
Copier après la connexion

Lorsque l'entier le plus négatif (-2147483648) est transmis à display(-2147483648), le compilateur génère une erreur "surcharges de fonctions ambiguës". Cela se produit car le compilateur ne peut pas déterminer quelle fonction appeler : display(int) ou display(unsigned).

Le rôle des littéraux entiers

Le comportement observé dans le L'exemple donné provient de l'absence de littéraux entiers négatifs en C . Les littéraux entiers doivent commencer par un chiffre différent de zéro. Dans le cas de -2147483648, le signe négatif est interprété comme l'opérateur moins unaire, ce qui donne l'expression -1 * (2147483648).

Type Promotion

Depuis 2147483648 dépasse la plage de int, il est promu en long int. Cependant, cette promotion crée une ambiguïté entre les types de paramètres display(int) et display(unsigned), conduisant à l'erreur.

Solution portable

Pour obtenir le valeurs minimales ou maximales pour un type de manière portable, on peut utiliser :

<code class="cpp">std::numeric_limits<type>::min(); // or max()</code>
Copier après la connexion

En utilisant cette méthode, les surcharges de fonctions ambiguës sont évitées, garantissant une gestion correcte du type quelle que soit la mise en œuvre.

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!