¿Cómo se evalúa una declaración 'if (A && B)'?
if( (A) && (B) )
{
//do something
}
else
//do something else
La pregunta es, ¿la declaración se rompería de inmediato en caso de que A fuera FALSO? ¿Sería B incluso evaluado?
Pido esto en el caso de que B verifique la validez de un índice de matriz, digamos matriz [0] cuando la matriz está realmente vacía y tiene cero elementos. Por lo tanto, estamos lanzando un Segfault porque estamos tratando de acceder a algo que está fuera de los límites de la matriz. Específicamente
if( (array.GetElements() > 0) && (array[0]))
array[0]->doSomething();
else
//do nothing and return
Esto puede ser peligroso si la matriz [0] realmente se evalúa porque falla, sin la primera comprobación a la izquierda de '&&'. La precedencia me dice que el lado izquierdo definitivamente tendrá prioridad, pero no me dice que no evaluará el lado derecho si el izquierdo es FALSO.