Wie wird eine 'if (A && B)' Anweisung ausgewertet?

if( (A) && (B) )
{
  //do something
}
else
  //do something else

Die Frage ist, würde die Aussage sofort zu etwas anderem brechen, wenn A FALSCH wäre. Würde B überhaupt bewertet werden?

Ich frage dies für den Fall, dass B die Gültigkeit eines Array-Index überprüft und array [0] sagt, wenn das Array tatsächlich leer ist und null Elemente hat. Wirf daher einen Segfault aus, weil wir versuchen, auf etwas zuzugreifen, das außerhalb der Grenzen des Arrays liegt. Speziell

if( (array.GetElements() > 0) && (array[0]))
  array[0]->doSomething();
else
  //do nothing and return

Dies kann gefährlich sein, wenn Array [0] tatsächlich ausgewertet wird, da es ohne das erste Häkchen links vom '&&' fehlerfrei abläuft. Die Priorität sagt mir, dass die linke Seite definitiv Vorrang hat, aber es sagt mir nicht, dass die rechte Seite nicht bewertet wird, wenn die linke FALSCH ist.

Antworten auf die Frage(5)

Ihre Antwort auf die Frage