Heim  >  Artikel  >  Backend-Entwicklung  >  Warum führt die Übergabe der negativsten Ganzzahl an eine überladene Funktion zu Mehrdeutigkeiten in C?

Warum führt die Übergabe der negativsten Ganzzahl an eine überladene Funktion zu Mehrdeutigkeiten in C?

Linda Hamilton
Linda HamiltonOriginal
2024-11-04 12:51:29625Durchsuche

Why Does Passing the Most Negative Integer to an Overloaded Function Cause Ambiguity in C  ?

Mehrdeutigkeit bei der Überladungsauflösung für die negativste ganze Zahl

In C ermöglicht die Funktionsüberladung, dass mehrere Funktionen denselben Namen, aber unterschiedliche Parametertypen haben. Beim Auflösen überladener Funktionsaufrufe kann es jedoch zu Mehrdeutigkeiten kommen, wenn der Compiler nicht die am besten geeignete aufzurufende Funktion ermitteln kann.

Betrachten Sie den folgenden Code, der die Funktionsüberladung für die Anzeige von ganzzahligen und vorzeichenlosen ganzzahligen Werten demonstriert:

<code class="cpp">void display(int a) { cout << "int" << endl; }
void display(unsigned a) { cout << "unsigned" << endl; }

Nach unserem Verständnis sollte jeder ganzzahlige Wert innerhalb des angegebenen Bereichs für int display(int) aufrufen, während Werte außerhalb dieses Bereichs zu Mehrdeutigkeiten führen würden. Beim Versuch, den negativsten int-Wert (-2147483648) zur Anzeige zu übergeben, gibt der Compiler jedoch einen Fehler aus:

call of overloaded display(long int) is ambiguous

Dieses überraschende Verhalten ist auf das Fehlen negativer Ganzzahlliterale in C zurückzuführen. Im C-Standard definierte Ganzzahlliterale enthalten nicht das Zeichen „-“. Wenn stattdessen ein „-“ gefolgt von einer Zahl auftritt, behandelt der Compiler es als unären Negationsoperator, der auf ein positives Ganzzahlliteral angewendet wird.

In unserem Fall wird „-2147483648“ als „-1 *“ interpretiert. 2147483648'. Da „2147483648“ den Bereich eines int überschreitet, wird es zu einem long int heraufgestuft. Diese Typheraufstufung führt zu Mehrdeutigkeiten, da jetzt sowohl display(int) als auch display(long int) geeignete Kandidaten für den Funktionsaufruf sind.

Um solche Mehrdeutigkeiten zu vermeiden, wird empfohlen, die Klasse std::numeric_limits zu verwenden Rufen Sie die Minimal- oder Maximalwerte für verschiedene Datentypen auf portable Weise ab:

<code class="cpp">std::cout << std::numeric_limits<int>::min() << endl;</code>

Das obige ist der detaillierte Inhalt vonWarum führt die Übergabe der negativsten Ganzzahl an eine überladene Funktion zu Mehrdeutigkeiten in C?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn