Maison  >  Article  >  développement back-end  >  Ambiguïté de la séquence de conversion : quand un opérateur de conversion l'emporte-t-il sur un constructeur ?

Ambiguïté de la séquence de conversion : quand un opérateur de conversion l'emporte-t-il sur un constructeur ?

DDD
DDDoriginal
2024-11-12 06:17:02903parcourir

Conversion Sequence Ambiguity: When Does a Conversion Operator Trump a Constructor?

Ambiguïté de la séquence de conversion : priorité des constructeurs de conversion par rapport aux opérateurs

Lors de l'initialisation d'un objet de classe B à partir d'un objet de classe A, ambiguïté peut survenir si à la fois un constructeur de conversion et un opérateur de conversion sont définis. L'interaction entre ces fonctions détermine laquelle sera invoquée.

Établissement de la priorité

Selon la norme C (8.5/14), les séquences de conversion définies par l'utilisateur qui peuvent convertir de A en B sont énumérés, et le meilleur est choisi grâce à la résolution de surcharge. Les opérateurs de conversion ne sont pris en compte que si le constructeur de conversion n'est pas applicable.

Transformation des paramètres

La résolution de surcharge transforme les fonctions de conversion et les constructeurs en listes de paramètres qui correspondent aux arguments d'appel. . Pour un opérateur de conversion, le paramètre d'objet implicite est généré, créant une liaison entre le paramètre de fonction de l'opérateur et l'objet source.

Candidat gagnant

L'opérateur de conversion gagne grâce à la règle du "moins de qualification const" (13.3.3.2/3). Dans ce cas, le constructeur B(const A&) a une référence const comme paramètre, tandis que l'opérateur de conversion opérateur B() a une référence non const. Puisque l'objet source est une rvalue (temporaire), la référence non const peut s'y lier.

Perspective orientée objet

D'un point de vue orienté objet, le choix par défaut de l'opérateur de conversion de A plutôt que du constructeur de B suggère qu'il incombe à la classe source (A) de définir la procédure de conversion. Cependant, il reste discutable de savoir si B, en tant que classe de destination, devrait avoir la responsabilité principale de cette conversion.

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!

Déclaration:
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