Как оценивается оператор if (A && B)?

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

Вопрос в том, будет ли утверждение немедленно нарушено, если A будет FALSE. Будет ли Б даже оценен?

Я спрашиваю об этом в случае, когда B проверяет правильность индекса массива скажем массив [0], когда массив на самом деле пуст и имеет нулевые элементы. Поэтому выбрасываем segfault, потому что мы пытаемся получить доступ к тому, что находится за пределами массива. конкретно

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

Это может быть опасно, если массив [0] действительно вычисляется, потому что он вызывает ошибки без первой проверки слева от '&&'. Приоритет говорит мне, что левая сторона определенно будет иметь приоритет, но это не говорит мне, что она не будет оценивать правую сторону, если левая будет ЛОЖЬ.