Si une classe a un constructeur à un seul argument, je crois savoir qu'elle est implicitement convertible par le constructeur au type de l'argument dans les contextes appropriés. La définition d'un opérateur de conversion rend également une classe convertible en un autre type. Questionsopérateur de conversion surchargé ou constructeur à un seul argument
- L'opérateur de conversion est-il jamais appelé implicitement?
- Si un constructeur à un seul argument et un opérateur de conversion du même type sont définis pour une classe, est-ce que l'un a préséance sur l'autre ou est-il ambigu?
- Si vous avez décidé que vous souhaitez convertir une classe en un type donné, quelle approche est la meilleure ou devez-vous fournir les deux?
Edit:
Je vois que je ne comprenais pas clairement la directionnalité et que les deux effectuer des conversions dans des directions opposées. Par la suite
- Si vous avez le contrôle sur deux classes que vous souhaitez rendre convertibles entre elles, existe-t-il un moyen privilégié pour ces deux opérations?
- Est-il possible de marquer l'opérateur de conversion comme explicite?
+1: * éviter les deux * –
Suggérez-vous que std :: string ne devrait pas avoir une conversion implicite de const char *? Cela rendrait la classe beaucoup plus difficile à utiliser. –
Non, je ne dis pas ça. Mais j'ai vu plusieurs fois des gens définir des opérateurs de conversion sur leurs propres classes de chaînes, puis être surpris que '+ 'ne soit pas toujours une concaténation, mais une arithmétique de pointeur. –