在避免杂散指针的情况下,这两个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();
换句话说,第一种情况是顺序检查,如果第一种情况评估,第二种情况会自动丢弃吗?非常感谢。
答案 0 :(得分:3)
您可以使用前者,因为&&
仅在第一个条件为true
时评估第二个条件。因此像
if ( p != NULL && p->age == 42 )
完全有效。
请注意,只有在处理内置类型时才会出现这种情况,当&&
为UDT重载时,同样的假设不再成立,但对于普通指针,上面的情况很好,而且确实如此你需要什么。