0

在避免杂散指针的情况下,这两个 if 条件如何评估?

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

其中 vShop[0] 是对象向量,vItem 是对象指针向量。

我想确保指针在进一步检查 vShop[0].vItem[vShop[0].itsActiveItem]->itsQuantity>0之前不会评估 NULL。

还是我必须单独做,即:

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

换句话说,第一种情况是否是顺序检查,如果第一个条件评估,第二个条件会自动删除?非常感谢。

4

1 回答 1

3

您可以使用前者,因为&&如果第一个条件是 ,则仅评估第二个条件true。因此像这样的代码

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

是完全有效的。

请注意,这仅在您处理内置类型时才是正确的,当&&为 UDT 重载时,相同的假设不再正确,但对于普通指针,上述内容很好,这正是您所需要的。

于 2013-10-10T17:08:09.167 回答