Rispondendo ad un altro topic, mi è sorto un dubbio.
Assodato che:
- la valutazione a corto circuito prevede che il secondo operando viene valutato soltanto se esso da solo non è sufficiente a determinare il risultato dell'espressione logica. Quindi in A&&B se A è falso B non viene valutato e in A||B se A è vero B non viene valutato;
- l'operatore && ha la precedenza sull'operatore ||.
Consideriamo quindi l'espressione:
A || B && C
Stando alla precedenza degli operatori dovrebbe essere valutata prima l'espressione B&&C (chiamiamo tale risultato D) e poi l'espressione A||D. Poi all'interno della valutazione delle due espressioni elementari si applica ovviamente il corto circuito.
Consideriamo ora il seguente esempio:
int A = 1;
int B = 0;
int C = 0;
cout << (A || ++B && C) << " " << B;
stando a quanto detto prima l'output dovrebbe essere
1 1
Dal momento invece che l'output è
1 0
significa che viene valutata prima l'espressione A||++B e che per il corto circuito, essendo A vero, l'operando ++B non viene proprio valutato.
Come si spiega questa apparente contraddizione tra teoria ed evidenza?