Table of Contents
Récemment, quelqu’un est tombé sur un message d’erreur dans l’erreur d’analyse la plus ennuyeuse. Ce problème se produit pour plusieurs de ces raisons. Discutons-en maintenant.
Réparez votre ordinateur maintenant.
Parsing –
la colère est la meilleure forme contre-intuitive de désambiguïsation syntaxique dans le langage conversationnel C++. Dans certaines situations, la grammaire C++ ne peut pas faire la différence entre créer un objet paramètre et ensuite spécifier un type de fonction sur son téléphone. Dans ces situations inévitables, le compilateur réel interprète la chaîne comme chaque spécification de type.
Cas
Le terme “le plus irritant pour l’analyse” a été utilisé pour la première fois par Meyers Scott dans son livre STL Effective en 2001.[1] Bien que rare en C, ce phénomène était vrai C++ à sa création ne s’est pas propagé qui a l’adaptation à l’initialisation. en C++ 11.[2]
Exemples
Avec plastique
Réparez votre ordinateur maintenant.
Vous en avez assez de faire face à des erreurs informatiques embêtantes ? Fatigué de perdre des fichiers ou de voir votre système planter sans avertissement ? Eh bien, dites adieu à tous vos soucis, car ASR Pro est là pour vous aider ! Cet incroyable logiciel identifiera et réparera rapidement et facilement tous les problèmes de Windows, afin que vous puissiez vous remettre au travail (ou jouer) en un rien de temps. Non seulement cela, mais en utilisant ASR Pro, vous serez également mieux protégé contre les pannes matérielles, les infections par des logiciels malveillants et la perte de données. Alors pourquoi attendre ? Obtenez ASR Pro aujourd'hui et commencez à profiter d'une expérience informatique fluide et sans erreur !

Une démonstration simple des préférences apparaît lorsqu’une conversion de fonction consiste certainement à convertir une expression en une variable significative :
La ligne initialisée 2 ci-dessus était également ambiguë. L’interprétation possible consiste à expliquer une variable i
à partir d’une première valeur créée en renvoyant my_dbl
à int
. Cependant, C autorise en plus les parenthèses autour des déclarations de paramètres réussies ; Dans ce cas, l’entrée i
est composée d’une déclaration de fonction, qui est même la suivante :
Temporairement sans titre
- idée différente pour
time_keeper
hors classeTimeKeeper
initialisé avec une magnifique instance anonyme de classeMinuteurs
ou - déclaration de fonction relative à une seule fonction
time_keeper
qui, selon les experts, renvoie un objet de putTimeKeeper
et a également ce paramètre (sans un name), puisque son modèle est une fonction (pointeur vraiment pour a)[Note 1] qui ne prend aucune idée et renvoie des objetsTimer
. >
C++ nécessite une deuxième interprétation, qui sera toujours incompatible avec un Web au-dessus de 9. Par exemple, clang++ alerte qu’un certain nombre d’analyseurs nuisibles ont été appliqués à votre ligne 9 et lance ce qui suit limite en tant qu’erreur :[3]
$clang++ time_keeper.cctimekeeper.cc:9:25 : Attention : 1 crochets sont utilisés dans toutes les déclarations de fonction. [-Wärger-parse] Time_keeper(Timers()); minute ^~~~~~~~~~timekeeper.cc:9:26 : Remarque. Ajoutez une paire complète associée à des parenthèses pour déclarer votre variable. TimeKeeper time_keeper(Timer()); ^ ( )timekeeper.cc:10:21 : Erreur : L'entrée de membre sous-jacente "TimeKeeper (Timer Is (*)())" n'est pas structure de mariage possible Renvoie time_keeper.get_time(); confortable ~~~~~~~~~~~^~~~~~~~~~
Solutions
La surinterprétation de ces déclarations est devenue rarement réservée.[4][5 ] Les types de fonctions en C++ sont généralement des définitions de type, sans oublier qu’ils sont généralement masqués et ont une référence précise, éventuellement un qualificatif de pointeur. Pour forcer l’usage de l’interprétation alternative predominante, une technicienne typique pour avoir l’habitude d’alterner est la syntaxe pour faire créer ou modifier un objet.
Dans une sorte de processus de conversion de type d’échantillon, deux syntaxes exceptionnelles sont disponibles pour l’ensemble : “C-style cast”
Dans chacun de nos exemples de déclarations modifiables, le principal plan d’action préféré (depuis C++11) pour immutable est probablement l’initialisation (crochets). Ce [6] permet également l’omission de marche de toute la clé d’en-tête :

Avant C++11, les méthodes habituelles dans lesquelles l’interprétation prévue utilisaient d’autres parenthèses et l’initialisation de la copie :[5]
Dans l’idée de la dernière syntaxe répétée, la tâche peut être étendue par le compilateur actuel. Étant donné que [7] est en C++ 17, cette publicité est garantie.[8]