Maison  >  Article  >  développement back-end  >  Plusieurs conversions implicites peuvent-elles être appliquées en une seule opération en C ?

Plusieurs conversions implicites peuvent-elles être appliquées en une seule opération en C ?

Linda Hamilton
Linda Hamiltonoriginal
2024-11-02 22:22:29993parcourir

Can Multiple Implicit Conversions Be Applied in a Single Operation in C  ?

Conversions implicites en C

Lors de discussions récentes sur les conversions implicites en C, des questions ont été soulevées quant à l'applicabilité de plusieurs conversions en une seule opération. . Pour élucider ce concept, examinons le code suivant :

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

Comme indiqué initialement, le premier appel de fonction est une erreur car il n'y a pas de conversion directe d'un const char* en un A. Alors qu'une conversion de chaîne en A existe, son utilisation nécessiterait deux conversions consécutives.

Selon la norme C (SC22-N-4411.pdf), section 12.3.4 intitulée « Conversions » :

" Au plus une conversion définie par l'utilisateur (constructeur ou fonction de conversion) est implicitement appliquée à une seule valeur."

Cela implique que dans le code donné, le compilateur ne peut pas implicitement appliquer à la fois le constructeur pour A(const std : :string &) et la conversion implicite de const char* en std::string (qui est ensuite converti en A) en argument "one".

Par conséquent, l'affirmation originale selon laquelle le premier appel de fonction serait entraîner une erreur est correct. La norme C indique explicitement qu'une seule conversion implicite définie par l'utilisateur est autorisée, empêchant le compilateur d'effectuer les étapes nécessaires pour satisfaire le type de paramètre de la fonction.

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