Maison  >  Article  >  développement back-end  >  Quelle est l'analyse la plus fastidieuse et pourquoi cela se produit-il en C 11 ?

Quelle est l'analyse la plus fastidieuse et pourquoi cela se produit-il en C 11 ?

Barbara Streisand
Barbara Streisandoriginal
2024-11-01 10:55:30774parcourir

What's the Most Vexing Parse and Why Does It Happen in C  11?

Comprendre les initialiseurs uniformes et l'analyse la plus délicate

En C 11, les initialiseurs uniformes fournissent une syntaxe concise pour initialiser des objets et des structures de données. Cependant, leur utilisation peut conduire à une ambiguïté potentielle, connue sous le nom de « l'analyse la plus vexante ».

L'analyse la plus vexante

Considérez l'extrait de code suivant :

<code class="cpp">#include<iostream>

class Timer
{
public:
    Timer() {}
};

int main() 
{
    auto dv = Timer(); // What is Timer() ? And what type is dv?
    int time_keeper(Timer()); // This is a function right? And why isn't the argument " Timer (*) ()"?
    return 0;
}</code>

Analyse :

dv = Timer();

  • Timer() peut être interprété comme une fonction ou une construction d'objet.
  • Comme auto est utilisé pour déclarer dv, son type est déduit de l'expression de droite.
  • Si Timer() est interprété comme un appel de fonction , dv serait un int car Timer() n'est pas une fonction qui renvoie un objet.
  • Cependant, si Timer() est interprété comme une construction d'objet, dv serait un objet Timer.

int time_keeper(Timer());

  • Timer() est interprété comme créant un objet Timer temporaire.
  • L'argument de time_keeper est un pointeur vers une fonction qui renvoie un Timer et ne prend aucun argument.
  • La fonction est implicitement convertie en pointeur lorsqu'elle est passée en argument.
  • Par conséquent, le type de time_keeper est int(Timer (*)()).

Conclusion :

Dans le scénario « d'analyse la plus frustrante », le compilateur tente de déduire le type et l'interprétation d'un expression basée sur le contexte et les règles. En comprenant comment ces règles s'appliquent, les programmeurs peuvent éviter toute ambiguïté et écrire du code avec une intention claire.

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