Jak ocenia się stwierdzenie „jeśli (A i & B)”?

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

Pytanie brzmi, czy stwierdzenie natychmiast przerwałoby, gdyby A było FAŁSZEM. Czy B zostanie nawet ocenione?

Pytam o to w przypadku, gdy B sprawdza poprawność indeksu tablicy powiedz tablicę [0], gdy tablica jest rzeczywiście pusta i ma zero elementów. Dlatego rzucanie segfaultu, ponieważ próbujemy uzyskać dostęp do czegoś, co jest poza zakresem tablicy. konkretnie

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

Może to być niebezpieczne, jeśli tablica [0] rzeczywiście zostanie poddana ocenie, ponieważ powoduje segregację bez pierwszego sprawdzenia po lewej stronie „&&”. Pierwszeństwo mówi mi, że lewy bok z pewnością będzie miał pierwszeństwo, ale nie mówi mi, że nie oceni prawej strony, jeśli lewy jest FAŁSZ.

questionAnswers(5)

yourAnswerToTheQuestion