Maison  >  Article  >  développement back-end  >  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
Susan Sarandonoriginal
2024-10-31 22:09:02971parcourir

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>

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>

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