在C ++中使用'&&'运算符的含义是什么?

时间:2019-11-25 00:28:26

标签: c++ logic operators binary-tree binary-search-tree

我正在一个项目中实现一个二进制搜索树,root是一个指向Node结构的指针,并且我在网上遇到了下面一行代码:

if ((root->left) && (root->right))

上面的代码等同于:

if (root->left == root->right)

如果不能,请给我解释一下区别吗?我以为您需要某种比较运算符(==,!=)。

1 个答案:

答案 0 :(得分:2)

您没有发布代码(在C ++中,很多事情取决于上下文),但我相信:

if ((root->left) && (root->right))

等效于:

if ((root->left != nullptr) && (root->right != nullptr))

当指针是非空指针时,C ++中的指针可以隐式转换为booltrue运算符的意思是“和”。因此,要使&&条件为iftrue root->left都是非空指针。

标准[conv.bool]的相关部分

  

算术,无作用域枚举,指针或指向的指针的prvalue   成员类型可以转换为bool类型的prvalue。零值   空指针值,或将空成员指针值转换为   假;其他任何值都将转换为true。用于直接初始化   ,可以将std :: nullptr_t类型的prvalue转换为prvalue   布尔型结果值为false。