¿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.

Respuestas a la pregunta(5)

Su respuesta a la pregunta