Jelenlegi hely

4.3.1 Rövidzár kiértékelés

Bizonyos esetekben a logikai operátor második operandusa nem értékelődik ki. Például a következő esetben:

(numChars < LIMIT) && (...)

Az && operátor csak akkor ad vissza true-t, ha mindkét operandus true. Tehát, ha numChars nagyobb vagy egyenlő, mint LIMIT, akkor && bal oldala false, és a kifejezés visszaadott eredménye a jobb oldali operandus kiértékelése nélkül születik meg. Ilyen esetekben a fordító nem értékeli ki a jobb oldali operandust. Ilyenkor a jobb oldali kifejezés miatt közvetett mellékhatások léphetnek fel, például ha adatfolyamból olvasunk, értékeket aktualizálunk, vagy számításokat végzünk a jobb oldali operandusban. Ehhez hasonlóan, ha a || operátor bal oldali operandusa igaz, felesleges a jobboldalt kiértékelni, nem is fog megtörténni.

Ha mindkét operandus logikai, az & operátor hasonlóan viselkedik, mint az &&. Azonban & mindig kiértékelődik és true-t ad vissza, ha mindkét operandusa true. Ha az operandusok boolean-típusúak, | azonos műveletet végez, mint ||.

A fenti működés miatt nem érdemes olyan kódot készíteni, amelyik a jobboldali operandusának kiértékelése során a kiértékelésen túl mást is tesz. Például veszélyes, nehezen áttekinthető lesz a következő feltételes kifejezés:

if (a < b && b++ < f(c) ) {...}

Ha a bal oldali operandus (a<b) hamis, akkor sem a ++ operátor, sem az f függvényhívás nem fog végrehajtódni.