Heim  >  Artikel  >  Backend-Entwicklung  >  Warum führt die implizite Konvertierung eines Personenobjekts in eine Zeichenfolge zu einem Fehler bei der Überlastungsauflösung?

Warum führt die implizite Konvertierung eines Personenobjekts in eine Zeichenfolge zu einem Fehler bei der Überlastungsauflösung?

Barbara Streisand
Barbara StreisandOriginal
2024-11-05 11:11:02493Durchsuche

Why Does Implicit Conversion of a Person Object to a String Result in Overload Resolution Failure?

Überlastungsauflösungsfehler während der impliziten Konvertierung von Objekten in Zeichenfolgen

Implizite Zeichenfolgenkonvertierungen werden im Allgemeinen nicht empfohlen, wobei eine Operatorüberladung für Person eine geeignetere Lösung darstellt. Sehen wir uns jedoch den folgenden Code an, um das Problem zu veranschaulichen:

<code class="cpp">#include <string>
#include <ostream>
#include <iostream>

struct NameType {
   operator std::string() { return "wobble"; }
};

struct Person {
   NameType name;
};

int main() {
   std::cout << std::string("bobble");
   std::cout << "wibble";

   Person p;
   std::cout << p.name; // Error occurs here
}</code>

Der Code wird bei Verwendung von GCC 4.3.4 fehlerfrei kompiliert und liefert die Ausgabe:

<code class="Bash">bobble
wibble</code>

Allerdings wird versucht Konvertieren Sie das Person-Objekt implizit in eine Zeichenfolge mit << Der Operator schlägt mit einem Überlastungsauflösungsfehler fehl:

<code class="Bash">prog.cpp:18: error: no match for ‘operator<<’ in ‘std::cout << p.Person::name’</code>

In diesem Fall ist der Operator << ist überladen, um std::string und const char* zu verarbeiten. Es gibt jedoch keine vordefinierte Überladung, die ein Person-Objekt akzeptiert und es implizit in eine Zeichenfolge konvertiert. Infolgedessen kann der Compiler die Überladung nicht auflösen.

Um dieses Problem zu beheben, sollten Sie einen expliziten Operator << definieren. für die Person-Struktur als Friend-Funktion, sodass die implizite Konvertierung von einem Person-Objekt in eine Zeichenfolge ordnungsgemäß funktioniert.

Das obige ist der detaillierte Inhalt vonWarum führt die implizite Konvertierung eines Personenobjekts in eine Zeichenfolge zu einem Fehler bei der Überlastungsauflösung?. 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