Considerate due condizioni con una connessione &&
. So che l'ordine di valutazione va da sinistra a destra. Ma se la prima condizione si risolve in falsa, la seconda condizione è garantita per non essere valutata?Una dichiarazione if è garantita per non essere valutata più del necessario?
#define SIZE
bool array[SIZE];
int index;
// play with variables
// ...
if(index < SIZE && array[index])
{
// ...
}
In questo esempio, se la prima condizione è falsa la seconda non deve essere valutata poiché l'accesso nella matrice sarebbe fuori portata.
A proposito, non posso semplicemente annidare i condizionali con due istruzioni if
, poiché in realtà ho bisogno dell'inversa come (!(in_range && get_element))
. Con le dichiarazioni annidate dovrei usare goto
per saltare sopra il blocco di codice sotto quello.
Questo non ha praticamente nulla a che fare con l'istruzione if. L'istruzione if viene eseguita solo una volta, ma quello che stai chiedendo è in realtà il comportamento dell'operatore '&&' ** **. –
Sentiti libero di modificare i tag e il titolo della domanda se fosse più adatto alla domanda reale. – danijar
Anche se il duplicato più esatto è quello sopra, le risposte sono migliori qui: http://stackoverflow.com/questions/5683026/logical-comparisons-is-left-to-right-evaluation-guaranteed, così come qui: http://stackoverflow.com/questions/628526/is-short-circuiting-boolean-operators-mandated-in-cc-and-evaluation-order – jogojapan