Je suis récemment tombé sur quelque chose que je pensais que je l'ai compris dès le départ, mais la réflexion plus sur lui, je voudrais comprendre pourquoi il fonctionne de la manière qu'il le fait.
Considérez le code ci-dessous. L' (x-- == 9)
est clairement d'obtenir une évaluation, tandis que l' (y++ == 11)
ne l'est pas. Ma première pensée était que logique, &&
coups de pied dans, voit que l'expression est déjà devenu faux, et des coups de pied avant de l'évaluation de la deuxième partie de l'expression.
Plus j'y pense, plus je ne comprends pas pourquoi il se comporte comme il le fait. Ce que je comprends, les opérateurs logiques tomber en dessous de incrémenter les opérations dans l'ordre de préséance. Ne devrait pas (y++ == 11)
être évalué, même si l'expression globale est déjà devenu faux?
En d'autres termes, ne faut-il pas l'ordre des opérations qui dictent (y++ == 11)
être évalué avant l' if
déclaration se rend compte de l'expression dans son ensemble sera faux?
#include <iostream>
using namespace std;
int main( int argc, char** argv )
{
int x = 10;
int y = 10;
if( (x-- == 9) && (y++ == 11) )
{
cout << "I better not get here!" << endl;
}
cout << "Final X: " << x << endl;
cout << "Final Y: " << y << endl;
return 0;
}
Sortie:
Final X: 9
Final Y: 10