web-dev-qa-db-fra.com

Comment C ++ gère-t-il &&? (Évaluation des courts-circuits)

Lorsque vous rencontrez un (bool1 && bool2), c ++ essaie-t-il de vérifier bool2 si bool1 a été trouvé faux ou l'ignore-t-il de la manière PHP le fait?

Désolé si c'est trop basique d'une question, mais je n'ai vraiment pu trouver une mention de cela ni dans Schildt ni sur Internet.

47
Aleksandrs Ulme

Oui le && L'opérateur en C++ utilise évaluation de court-circuit pour que si bool1 évalue à false cela ne dérange pas d'évaluer bool2.

"Évaluation de court-circuit" est le terme de fantaisie que vous souhaitez rechercher dans Google et rechercher dans les index.

54
jason

C++ utilise une logique de court-circuit, donc si bool1 est faux, il n'aura pas besoin de vérifier bool2.

C'est utile si bool2 est en fait une fonction qui retourne bool, ou pour utiliser un pointeur:

if ( pointer && pointer->someMethod() )

sans logique de court-circuit, il planterait lors du déréférencement d'un pointeur NULL, mais avec une logique de court-circuit, cela fonctionne très bien.

30
Tim

C'est correct (comportement court-circuit). Mais attention: le court-circuit s'arrête si l'opérateur invoqué n'est pas l'opérateur intégré, mais un operator&& Défini par l'utilisateur (pareil avec operator||).

Référence dans ce SO

15
Mat

Le && court-circuit de l'opérateur en C++ - si bool1 était faux dans votre exemple, bool2 ne serait pas vérifié/exécuté.

2
wkl

C'est ce qu'on appelle l'évaluation des courts-circuits (Wikipedia)

L'opérateur && est un opérateur de court-circuit en C++ et il n'évaluera pas bool2 si bool1 est faux.

1
trev

L'évaluation de court-circuit dénote la sémantique de certains opérateurs booléens dans certains langages de programmation dans lesquels le deuxième argument n'est exécuté ou évalué que si le premier argument ne suffit pas à déterminer la valeur de l'expression: par exemple, lorsque le premier argument du AND la fonction est fausse, la valeur globale doit être fausse; et lorsque le premier argument de la fonction OR est évalué à vrai, la valeur globale doit être vraie.

En C++, à la fois && et || les opérateurs utilisent l'évaluation des courts-circuits.

1
TCSGrad

Ce à quoi vous faites référence est évaluation de court-circuit . Je pensais que cela pouvait être spécifique au compilateur, mais cet article auquel je suis lié le montre comme spécifique au langage, et C++ adhère. S'il est en effet spécifique au compilateur, je ne peux pas imaginer un compilateur qui ne le suivrait pas. Le compilateur quotidien que j'utilise actuellement, VS 2008, le fait. Fondamentalement, il suivra la priorité de l'opérateur, et dès que le résultat de la condition est garanti,

0
TheTFo