Quelle est la relation entre la priorité des opérateurs et l'ordre d'évaluation ?
Contrairement à la compréhension populaire, la priorité des opérateurs ne détermine pas entièrement l'ordre des évaluation en programmation. Bien que la priorité régisse l'ordre des calculs de valeurs, l'évaluation des opérandes eux-mêmes reste indépendante de la priorité.
Exemple :
Considérons l'expression x < y &Lt ; z. Les règles de priorité imposent qu'il soit analysé comme (x < y) < z. Cependant, une machine à pile, par exemple, pourrait évaluer l'expression comme suit :
push(z); push(y); push(x); test_less(); // compares TOS to TOS(1), pushes result on stack test_less(); // compares TOS to TOS(1), pushes result on stack
Ceci évalue z avant x ou y, mais évalue toujours (x < y) et compare le résultat à z, comme prévu.
Évaluation et effets secondaires :
Effets secondaires, tels que l'incrémentation ou la décrémentation une variable, sont exécutés conceptuellement par un thread distinct. Ce fil se joint au point de séquence suivant. Considérons l'expression a = bc;. Il pourrait être exécuté comme suit :
push(a); push(b); push(c+1); side_effects_thread.queue(inc, b); side_effects_thread.queue(inc, c); add(); assign(); join(side_effects_thread);
Ici, a est évalué avant b ou c, même s'il est la cible de la mission. Tenter d'utiliser une variable dans n'importe quelle autre partie d'une expression avant le point de séquence suivant entraîne un comportement indéfini.
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!