Maison > développement back-end > C++ > Plusieurs conversions implicites définies par l'utilisateur peuvent-elles être appliquées en C ?

Plusieurs conversions implicites définies par l'utilisateur peuvent-elles être appliquées en C ?

Susan Sarandon
Libérer: 2024-10-31 22:09:02
original
1109 Les gens l'ont consulté

Can Multiple Implicit User-Defined Conversions Be Applied in C  ?

Conversions implicites en C : Clarification

Dans une discussion récente, la validité des conversions implicites en C a été remise en question. Plus précisément, le problème consiste à savoir si plusieurs conversions implicites définies par l'utilisateur sont autorisées. Pour faire la lumière sur ce sujet, examinons le code suivant :

<code class="cpp">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

Comme indiqué dans la question d'origine, le premier appel de fonction entraîne une erreur car il n'y a pas de conversion d'un const char * en A . Bien qu'une conversion d'une chaîne en A existe, son application implique plusieurs conversions, ce qui n'est pas autorisé. Ceci est corroboré par le standard C :

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

Dans ce cas, la présence de deux conversions implicites (string en const char et const char en A) viole cette règle, conduisant à une erreur du compilateur. Par conséquent, l'affirmation selon laquelle plusieurs conversions implicites définies par l'utilisateur sont interdites en C est exacte.

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 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