Maison > développement back-end > C++ > Lors de la conversion entre types : l'objet source ou destination est-il prioritaire ?

Lors de la conversion entre types : l'objet source ou destination est-il prioritaire ?

Mary-Kate Olsen
Libérer: 2024-11-07 08:39:03
original
796 Les gens l'ont consulté

When Converting Between Types: Does the Source or Destination Object Take Precedence?

Constructeur de conversion vs opérateur de conversion : priorité

En C, les constructeurs de conversion et les opérateurs de conversion fournissent des moyens de convertir des objets entre différents types. Lorsque les deux sont disponibles pour une conversion donnée, il est crucial de comprendre leur priorité pour déterminer lequel sera appelé.

Établissement de la priorité

La priorité entre les constructeurs de conversion et les opérateurs de conversion est défini par le standard C (13.3.1.4) :

La résolution de surcharge est utilisée pour sélectionner la conversion définie par l'utilisateur à effectuer invoqué. Les fonctions candidates sont sélectionnées comme suit :

  • Les constructeurs de conversion (12.3.1) du type de destination sont des fonctions candidates.
  • Les fonctions de conversion du type source et ses classes de base qui donnent un Le type compatible avec le type de destination sont des fonctions candidates.

Remplacement de l'opérateur Constructeur

Dans l'exemple de code fourni, où un constructeur de conversion et un opérateur de conversion sont définis pour la classe A en B, l'opérateur de conversion a la priorité :

class A;

class B { 
      public: 
         B(){} 
         
         B(const A&) //conversion constructor
         { 
              cout << &quot;called B's conversion constructor&quot; << endl; 
         } 
};

class A { 
      public: 
         operator B() //conversion operator
         { 
              cout << &quot;called A's conversion operator&quot; << endl; 
              return B(); 
         } 
};
Copier après la connexion

Ceci est car, lors de la liaison des paramètres de référence (ici, le paramètre d'objet implicite de la fonction de conversion), la référence non const dans la fonction de conversion (A&) a priorité sur la référence const dans le constructeur de conversion (const A&).

Considérations philosophiques orientées objet

Concernant la question philosophique de savoir quelle classe devrait être responsable de la conversion d'un objet, le standard se range du côté de la source classe (A dans ce cas). Cela correspond au principe de l'encapsulation, car cela permet à la classe source de contrôler le processus de conversion et de garantir l'exactitude de l'objet résultant (B).

C'est en fin de compte à la discrétion du développeur de déterminer le mécanisme de conversion approprié. pour un scénario spécifique, en tenant compte de facteurs tels que l'encapsulation, l'abstraction et la lisibilité du code.

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