Logiques ET, OU: Est de gauche à droite de l'évaluation de la garantie?

Est de gauche à droite de l'évaluation des opérateurs logiques (&& ||) garanti?

Disons que j'ai ceci:

SDL_Event event;

if (SDL_PollEvent(&event)) {
    if (event.type == SDL_QUIT) {
            //do stuff
    }
}

Est-ce garanti d'être le même que celui de la?

SDL_Event event;

if (SDL_PollEvent(&event) && event.type == SDL_QUIT) {
    //do stuff
}

Cela peut aussi être très important, disons que nous avons deux exigences, a et b. Exigence a est beaucoup plus susceptible d'échouer alors b. Ensuite, il est plus efficace de dire if (a && b) que if (b && a).

  • Un classique, l'utilisation importante pour le séquençage de l'implicite par && est de tester des pointeurs null avant de l'utiliser: if (a != 0 && a->b != 0 && a->b->c != 0) { somefunc(a->b->c->d); }. La séquence est essentielle pour éviter les vidages mémoire. (Et je suis ignorant la Loi de Déméter pour l'application de l'exposition!)
  • Je l'ignore pour le but d'obtenir le travail fait!
  • Ce ne sont pas des opérateurs de comparaison.
InformationsquelleAutor orlp | 2011-04-15