Usein törmätään tilanteisiin, joissa vaadittua ehtoa ei pystytä ilmaisemaan yhdellä ainoalla vertailulausekkeella. Jos esimerkiksi määritellään teini-ikäisen määrittävä ehto (ikä 13-19), olisi pystyttävä ilmaisemaan, että iän tulee täyttää samanaikaisesti kaksi ehtoa
Ehtoja voidaan yhdistellä loogisilla operaatioilla. C++-kielen tuntemat loogiset operaattorit ovat
! |
ei (not), looginen negaatio |
&& |
ja (and), looginen tulo |
|| |
tai (or), looginen summa |
Kun kaksi vertailua yhdistetään ja-operaattorilla, on koko lausekkeen arvo tosi vain, jos molemmat vertailut ovat tosia. Näin ollen muuttujan ika avulla voidaan antaa teini-iän määrittelevä ehto
(13 <= ika && ika <= 19) /* EI!: 13 <= ika <= 19 */
Tai-operaatio puolestaan antaa arvon tosi, jos jompi kumpi (tai molemmat) yhdistettävistä ehdoista on tosi.
Ei-operaatiota voidaan käyttää mm. seuraavasti:
!(ika < 18)
Ehto toteutuu silloin, kun ika ei ole alle 18. Toisena esimerkkinä on ehto
!(ika==18)
joka toteutuu silloin kun ika ei ole 18. Käytännössä em. ehto voitaisiin korvata käyttämällä eri suuri kuin -vertailuoperaattoria:
(ika!=18)
C++-kielessä ehtolausekkeita ei välttämättä suoriteta loppuun saakka, jos lausekkeen alkuosa jo määrää lopputuloksen: Voidaan esimerkiksi huoletta kirjoittaa ehto
(k != 0 && 100/k > 4)
ilman nollalla jaon vaaraa, sillä (kokonaisluku)muuttujan k ollessa nolla määräytyy ehtolauseen arvo kokonaisuudessaan ensimmäisestä vertailusta, joten lauseketta 100/k ei edes yritetä laskea.
Oletetaan että ika muuttuja saa arvot 6, 8,
17, 18, 20, 25, 55, 64, 65 ja 99. Millä arvoilla toteutuvat
seuraavat ehtolauseet?
(ika < 18 || 64 < ika)
(ika == 18 ||ika == 65)
(ika != 18 && ika != 65)
(18 < ika && ika < 65)
(18 < ika && ika < 17)