Heim  >  Artikel  >  Backend-Entwicklung  >  Wie wird die beste Übereinstimmung beim Überladen von C++-Funktionen ermittelt?

Wie wird die beste Übereinstimmung beim Überladen von C++-Funktionen ermittelt?

王林
王林Original
2024-04-26 14:45:02833Durchsuche

Die Reihenfolge, in der die beste Übereinstimmung ermittelt wird, ist: Präzisionsübereinstimmung, Standardtransformation, benutzerdefinierte Transformation, Standardanzahl der Argumente, mindestens

C++ 函数重载中的 best match 是如何决定的?

Wie wird die beste Übereinstimmung bei der Überladung von C++-Funktionen ermittelt?

In C++ können Sie durch Funktionsüberladung mehrere Versionen einer Funktion mit demselben Namen, aber unterschiedlichen Parametern erstellen. Der Compiler befolgt eine Reihe von Regeln, um die beste Übereinstimmung zu ermitteln, wenn die entsprechende überladene Version verwendet wird.

Regeln:

  1. Präzise Übereinstimmung: Diese Regel gilt, wenn der Typ des tatsächlichen Teilnehmers genau mit dem Typ des formellen Teilnehmers übereinstimmt.
  2. Standardkonvertierung: Diese Regel gilt, wenn eine tatsächliche Teilnehmernummer implizit in eine formelle Teilnehmernummer umgewandelt werden kann.
  3. Benutzerdefinierte Konvertierungen: Wenn es einen benutzerdefinierten Konvertierungsoperator gibt und die tatsächlichen Teilnehmer in formelle Teilnehmer umgewandelt werden können, dann gilt diese Regel.
  4. Standardparameter: Überladene Versionen mit Standardparametern haben eine niedrigere Priorität als Versionen ohne Standardparameter.

Bestimmungsreihenfolge der besten Übereinstimmungen:

  1. Zuerst versucht der Compiler, eine Genauigkeitsübereinstimmung durchzuführen.
  2. Wenn es keine Genauigkeitsübereinstimmung gibt, versucht der Compiler, Standardkonvertierungen zu verwenden.
  3. Wenn keine Standardkonvertierung vorhanden ist, versucht der Compiler, eine benutzerdefinierte Konvertierung zu verwenden.
  4. Wenn keine Transformation angewendet wird, wählt der Compiler die Version mit den wenigsten Standardparametern.

Praktisches Beispiel:

Berücksichtigen Sie den folgenden Code:

void foo(int x);
void foo(float x);

Beim Aufrufen des Typs foo(3.14) 时,编译器将使用 void foo(float x) 作为最佳匹配,因为浮点常量 3.14 可以隐式转换为 float.

Zusätzliche Hinweise:

  • Der Compiler meldet einen Fehler, wenn mehrere überladene Versionen mit derselben besten Übereinstimmung vorhanden sind.
  • Der Compiler meldet auch einen Fehler, wenn er die beste Übereinstimmung nicht ermitteln kann.
  • Um Mehrdeutigkeiten zu vermeiden, ist es am besten, sicherzustellen, dass die Signaturen von Funktionsüberladungen eindeutig sind.

Das obige ist der detaillierte Inhalt vonWie wird die beste Übereinstimmung beim Überladen von C++-Funktionen ermittelt?. 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