Как эти два условия 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();
Другими словами, первый случай является последовательной проверкой, и если первое условие оценивается, второе условие автоматически отбрасывается? Большое спасибо.
Вы можете использовать первое, так как &&
оценивает только второе условие, если первое true
. Следовательно, код, подобный
if ( p != NULL && p->age == 42 )
отлично.
Beward, что это справедливо только в том случае, если вы имеете дело со встроенными типами, то такое же предположение больше не верно, когда &&
перегружается для UDT, но для простых указателей это хорошо, и это именно то, что вам нужно.
==
для сравнения со строкой символов.