我是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;
}
答案 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。