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