Избегание случайных указателей в условиях, включающих AND

0

Как эти два условия if оцениваются в случае избежания блуждающих указателей?

if (vShop[0].vItem[vShop[0].itsActiveItem]!=NULL && vShop[0].vItem[vShop[0].itsActiveItem]->itsQuantity>0) DoPurchase();

где vShop [0] - вектор объектов, а vItem - вектор указателей на объекты.

Я хочу убедиться, что указатель не оценивает NULL, прежде чем он проверит vShop [0].vItem [vShop [0].itsActiveItem] → itsQuantity> 0.

Или мне нужно сделать это отдельно, то есть:

if (vShop[0].vItem[vShop[0].itsActiveItem]!=NULL) if (vShop[0].vItem[vShop[0].itsActiveItem]->itsQuantity>0) DoPurchase();

Другими словами, первый случай является последовательной проверкой, и если первое условие оценивается, второе условие автоматически отбрасывается? Большое спасибо.

Теги:
pointers
if-statement

1 ответ

3
Лучший ответ

Вы можете использовать первое, так как && оценивает только второе условие, если первое true. Следовательно, код, подобный

if ( p != NULL && p->age == 42 )

отлично.

Beward, что это справедливо только в том случае, если вы имеете дело со встроенными типами, то такое же предположение больше не верно, когда && перегружается для UDT, но для простых указателей это хорошо, и это именно то, что вам нужно.

  • 0
    На самом деле, это не нормально, если только для типа "foo" не определен оператор == для сравнения со строкой символов.
  • 0
    @HotLicks Я все равно улучшил ответ, чтобы избежать путаницы и отвлечения реальной темы под рукой.
Показать ещё 4 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню