43 votes

Ordre d'évaluation des arguments « SI » ?

if(a && b)
{
  do something;
}

y a-t-il une possibilité d'évaluer les arguments de droite à gauche (b -> a) ?

si « oui », qu'est-ce qui influence l'ordre d'évaluation ?

(j'utilise VS2008)

56voto

Luchian Grigore Points 136646

L'ordre d'évaluation est spécifié par la norme et est left-to-right . L'expression la plus à gauche sera toujours évaluée en premier avec la clause &&

Si vous voulez que b soit évalué en premier :

 if(b && a)
{
  //do something
}

Si les deux arguments sont des méthodes et que vous souhaitez que les deux soient évalués quel que soit leur résultat :

 bool rb = b();
bool ra = a();

if ( ra && rb )
{
  //do something
}

7voto

Mysticial Points 180300

Dans ce cas, puisque vous utilisez && , a sera toujours évalué en premier car le résultat est utilisé pour déterminer s'il faut ou non court-circuiter l'expression.

Si a renvoie false, alors b n'est pas du tout autorisé à évaluer.

4voto

Pacheco Points 11

Chaque calcul de valeur et effet secondaire du premier argument (gauche) de l'opérateur logique AND intégré && et de l'opérateur OR logique intégré || est séquencé avant chaque calcul de valeur et effet secondaire du deuxième argument (à droite).

Lisez ici pour une explication plus exhaustive des règles définies : évaluation de la commande

2voto

Dylan Smith Points 11848

Il évaluera de gauche à droite et court-circuitera l'évaluation s'il le peut (par exemple, si a est évalué à faux, il n'évaluera pas b).

Si vous vous souciez de l'ordre dans lequel ils sont évalués, il vous suffit de les spécifier dans l'ordre d'évaluation souhaité dans votre instruction if.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X