Comment lire une expression complexe c ++ de

C ++ est plein de petits symboles, dont chacun ajoute à la signification des expressions. Les règles de la grammaire C ++ sont si souples que ces symboles peuvent être combinés dans des combinaisons presque impénétrable complexes. Les expressions dans la langue simple de C peuvent obtenir si obtus que il y avait un concours annuel pour qui pouvait écrire le programme le plus obscur et qui pourrait comprendre.

Il est jamais une bonne idée d'essayer d'écrire du code complexe, mais vous sera parfois courir à travers les expressions en C ++ qui sont un peu déroutant au premier abord. Il suffit d'utiliser les étapes suivantes pour les comprendre:

  1. Commencez par les parenthèses les plus intégrés.

    Commencez à chercher les extérieurs plupart des parenthèses. Dans ceux-ci, chercher des parenthèses embarqués. Répétez le processus jusqu'à ce que vous avez travaillé votre chemin à la paire la plus profonde de parenthèses. Commencer à évaluer ce que sous-expression de la première utilisation, les règles suivantes. Une fois que vous comprenez que l'expression, ressortira au niveau suivant et répétez le processus.

  2. Dans la paire de parenthèses, d'évaluer chaque opération dans l'ordre de préséance.

    L'ordre dans lequel les opérateurs sont évalués est déterminée par la priorité de l'opérateur indiqué dans le tableau. Indirection vient avant la multiplication qui vient avant l'addition donc la suivante ajoute 1 plus 2 fois la valeur pointée par * ptr.

int i = 1 + 2 * * ptr-
Opérateurs par ordre de préséance
PrioritéOpérateurSignification
1() (Unaire)Invoquer une fonction
2* Et -> (unaire)Déréférencer un pointeur
2- (unaire)Retourne le négatif de son argument
3++ (unaire)Incrément
3-- (unaire)Décrément
4* (Binaire)Multiplication
4/ (Binaire)Division
4% (Binaire)Modulo
5+ (binaire)Addition
5- (binaire)Soustraction
6 (binaire)ET logique
6!!OU logique
7=, * =,% =, + =, - = (Spéciale)Types d'affectation
  1. Évaluer les opérations de la même priorité de gauche à droite (sauf cession, qui va dans l'autre sens).




    La plupart des opérateurs de même priorité évaluer de gauche à droite. Ainsi la suivante ajoute 1 à 2 et ajoute le résultat à 3:

    int i = 1 + 2 + 3

    L'ordre d'évaluation de certains opérateurs n'a pas d'importance. Par exemple, fonctionne de la même addition de gauche à droite comme il le fait de droite à gauche. L'ordre d'évaluation fait beaucoup de différence pour certaines opérations comme la division. Les divisions suivantes 8 par 4 et divise le résultat par 2:

    int i = 8/4 / 2-

    La principale exception à cette règle est la cession, qui est évaluée de droite à gauche:

    a = b = c-

    Ceci affecte C à B et le résultat d'un.

  2. Évaluer sous-expressions dans aucun ordre particulier.

    Considérons l'expression suivante:

    int i = f () + g () * h () -

    Multiplication a une priorité plus élevée, de sorte que vous pourriez supposer que les fonctions g () et h () sont appelés avant f (), cependant, c'est pas le cas. Appel de fonction a la priorité la plus élevée de tous, afin que tous les trois fonctions sont appelées soit avant la multiplication ou l'addition est effectuée. (Les résultats renvoyés par g () et h () sont multipliés et ensuite ajoutés aux résultats retournés à partir de f ().)

    La seule fois que l'ordre que les fonctions sont appelées fait une différence est lorsque la fonction a des effets secondaires tels que l'ouverture d'un fichier ou modifier la valeur d'une variable globale. Vous devriez vraiment pas écrire vos programmes afin qu'ils dépendent de ce type d'effets secondaires.

  3. Effectuez toutes les conversions de type uniquement lorsque cela est nécessaire.

    Vous ne devriez pas faire plus de conversions de type absolument nécessaire. Par exemple, l'expression suivante a au moins trois et peut-être quatre conversions de type:

    flotter f = 'a' + 1-

    Le char 'un «doit être promu à un int pour effectuer l'addition. L'int est ensuite converti en un lit double et puis vers le bas converti en un seul flotteur de précision. Rappelez-vous que toute l'arithmétique est effectuée soit dans int ou double. Vous devez généralement éviter arithmétique effectuer sur les types de caractères et d'éviter tout seul flotteur de précision.


» » » » Comment lire une expression complexe c ++ de