如果涉及AND的条件,避免使用杂散指针

时间:2013-10-10 17:05:20

标签: c++ pointers if-statement

在避免杂散指针的情况下,这两个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();

换句话说,第一种情况是顺序检查,如果第一种情况评估,第二种情况会自动丢弃吗?非常感谢。

1 个答案:

答案 0 :(得分:3)

您可以使用前者,因为&&仅在第一个条件为true时评估第二个条件。因此像

这样的代码
if ( p != NULL && p->age == 42 )

完全有效。

请注意,只有在处理内置类型时才会出现这种情况,当&&为UDT重载时,同样的假设不再成立,但对于普通指针,上面的情况很好,而且确实如此你需要什么。