与NULL有关的C ++指针

时间:2014-11-05 19:00:28

标签: c++ pointers

我是c ++的新手,我对下面的代码有疑问。 “if(p1.spouse || p2.spouse) return false”这句话是另一种说法吗? if(p1.spouse!= NULL || p2.spouse!=NULL)return false“?

struct Person     
{
    string name;       
    string bday;       
    int height;      
    Person* spouse;    
};

bool marry(Person&, Person&);

int main() 
{ 
    Person john;    
    john.name = "John";    
    john.bday = "May 29, 1917";    
    john.height = 72;    
    john.spouse = NULL;     
    Person marilyn;    
    marilyn.name = "Marilyn";        
    marilyn.bday = "06/01/1926";       
    marilyn.height = 64;        
    marilyn.spouse = NULL;    
    marry(john, marilyn); 
    cout << "John is married to " << john.spouse->name << endl;    
}

bool marry(Person& p1, Person& p2) 
{    
    if (p1.spouse || p2.spouse) return false;       
        p1.spouse = &p2;    
    p2.spouse = &p1;   
    return true;
}

3 个答案:

答案 0 :(得分:3)

是的,这是真的。布尔上下文中的任何指针如果为NULL则求值为false,如果不为NULL则求值为true。

许多人认为它风格很差,而且更喜欢进行明确的比较!= NULL

我个人认为它非常优雅:它意味着物体的存在。特别是短路布尔&&

if (obj && ojb->whatever())
    ...;

答案 1 :(得分:1)

这是事实,这是经常使用的功能。

来自:http://en.cppreference.com/w/cpp/language/implicit_cast

&#34;值为零(对于整数,浮点和无范围枚举),空指针和空指针到成员值变为false。所有其他值都成为现实。 &#34;

您可以在该网址找到更多隐式转化规则

答案 2 :(得分:0)

是的,你是对的。任何指针(如果为NULL)如果在条件表达式中使用,则返回false。