Maison > développement back-end > C++ > Pourquoi la conversion implicite d'un objet personne en chaîne entraîne-t-elle un échec de résolution de surcharge ?

Pourquoi la conversion implicite d'un objet personne en chaîne entraîne-t-elle un échec de résolution de surcharge ?

Barbara Streisand
Libérer: 2024-11-05 11:11:02
original
576 Les gens l'ont consulté

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

Échec de la résolution de surcharge lors de la conversion implicite d'un objet en chaîne

Les conversions implicites de chaînes sont généralement déconseillées, une surcharge d'opérateur pour Person étant une solution plus appropriée. Cependant, examinons le code suivant pour illustrer le problème :

<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>
Copier après la connexion

Le code se compile sans erreur lors de l'utilisation de GCC 4.3.4, donnant le résultat :

<code class="Bash">bobble
wibble</code>
Copier après la connexion

Cependant, en essayant de convertir implicitement l'objet Person en chaîne à l'aide de << l'opérateur échoue avec une erreur de résolution de surcharge :

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

Dans ce cas, l'opérateur << est surchargé pour gérer std::string et const char*, cependant, il n'existe pas de surcharge prédéfinie qui accepte un objet Person et le convertit implicitement en chaîne. En conséquence, le compilateur ne parvient pas à résoudre la surcharge.

Pour remédier à ce problème, vous devez définir un opérateur explicite << pour la structure Person en tant que fonction ami, permettant à la conversion implicite d'un objet Person en chaîne de fonctionner correctement.

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