Heim > Backend-Entwicklung > C++ > Hauptteil

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

Barbara Streisand
Freigeben: 2024-11-05 11:11:02
Original
539 Leute haben es durchsucht

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>
Nach dem Login kopieren

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

<code class="Bash">bobble
wibble</code>
Nach dem Login kopieren

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>
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage