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.