Как оценивается оператор 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] действительно вычисляется, потому что он вызывает ошибки без первой проверки слева от '&&'. Приоритет говорит мне, что левая сторона определенно будет иметь приоритет, но это не говорит мне, что она не будет оценивать правую сторону, если левая будет ЛОЖЬ.

Ответы на вопрос(5)

Ваш ответ на вопрос