Maison > développement back-end > C++ > Pourquoi C n'autorise-t-il qu'une seule conversion définie par l'utilisateur lors des conversions de type implicites ?

Pourquoi C n'autorise-t-il qu'une seule conversion définie par l'utilisateur lors des conversions de type implicites ?

Patricia Arquette
Libérer: 2024-11-01 01:14:28
original
645 Les gens l'ont consulté

Why Does C   Allow Only One User-Defined Conversion During Implicit Type Conversions?

Conversions implicites C : comprendre les règles de conversion définies par l'utilisateur

À la lumière des commentaires récents sur une réponse précédente, il est essentiel de clarifier la compréhension de conversions implicites en C .

Considérez l'extrait de code suivant :

<code class="c++">#include <string>

struct A {
    A(const std::string &s) {}
};

void func(const A &a) {
}

int main() {
    func("one"); // error
    func(A("two")); // ok
    func(std::string("three")); // ok
}</code>
Copier après la connexion

Le premier appel de fonction entraîne une erreur car il n'y a pas de conversion directe d'un const char* en un A. Bien qu'il existe une conversion d'une chaîne en A, l'appliquer nécessiterait plusieurs conversions, ce qui n'est pas autorisé.

La norme C (SC22-N-4411.pdf) fournit la réponse dans la section 12.3.4. intitulé « Conversions » :

"4 At most one user-defined conversion (constructor or conversion function) is implicitly applied to a single value."
Copier après la connexion

Cela signifie qu'une seule conversion implicite définie par l'utilisateur (soit un constructeur, soit une fonction de conversion) peut être appliquée à une seule valeur lors des conversions de type implicites ou de l'initialisation.

Dans le code donné, le premier appel de fonction, func("one"), tente d'utiliser une conversion implicite du const char* "one" en A, mais il échoue car cela nécessite deux conversions (une de const char * à std :: string, et un autre de std :: string à A). Les deux autres appels de fonction sont valides car ils n'impliquent chacun qu'une seule conversion implicite.

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