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!