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!