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.