Maison > développement back-end > C++ > le corps du texte

L'analyse la plus vexante : Timer() - Appel d'objet ou de fonction ?

Patricia Arquette
Libérer: 2024-10-31 18:09:01
original
201 Les gens l'ont consulté

The Most Vexing Parse: Timer() - Object or Function Call?

Analyse la plus vexante : lever l'ambiguïté en C 11

L'ambiguïté de "l'analyse la plus vexante" en C 11 se présente lors de l'utilisation d'initialiseurs uniformes, comme en témoigne l'extrait de code suivant :

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

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

int main()
{
    auto dv = Timer(); // Ambiguity: Object or function call?
    int time_keeper(Timer()); // Ambiguity: Pointer or call?
    return 0;
}</code>
Copier après la connexion

Comprendre la première expression (auto dv = Timer())

Dans la première expression, le mot-clé auto implique que le type de dv est déduit de l'initialiseur situé à droite du signe égal (=). L'initialiseur est un appel au constructeur Timer sans argument, qui renvoie un objet Timer. Par conséquent, dv est un objet de type Timer.

Comprendre la deuxième expression (int time_keeper(Timer()))

Dans la deuxième expression, l'ambiguïté surgit car le compilateur ne peut pas déterminer si Timer() est un appel de fonction ou un objet de type Timer passé par référence.

  • Si Timer() est un appel de fonction, alors int time_keeper(Timer()) déclare un fonction appelée time_keeper qui prend un objet Timer en entrée et renvoie un int.
  • Si Timer() est un objet de type Timer, alors int time_keeper(Timer()) déclare une fonction appelée time_keeper qui prend un pointeur vers un objet Timer en entrée et renvoie un int.

Cependant, comme les fonctions se désintègrent en pointeurs lorsqu'elles sont passées en arguments, le vrai type de time_keeper est int(Timer(*)()), qui résout le ambiguïté en faveur de l'interprétation pointeur vers 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!

source:php.cn
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
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!