我正在一个项目中实现一个二进制搜索树,root是一个指向Node结构的指针,并且我在网上遇到了下面一行代码:
if ((root->left) && (root->right))
上面的代码等同于:
if (root->left == root->right)
如果不能,请给我解释一下区别吗?我以为您需要某种比较运算符(==,!=)。
答案 0 :(得分:2)
您没有发布代码(在C ++中,很多事情取决于上下文),但我相信:
if ((root->left) && (root->right))
等效于:
if ((root->left != nullptr) && (root->right != nullptr))
当指针是非空指针时,C ++中的指针可以隐式转换为bool
。 true
运算符的意思是“和”。因此,要使&&
条件为if
,true
和 root->left
都是非空指针。
标准[conv.bool]的相关部分
算术,无作用域枚举,指针或指向的指针的prvalue 成员类型可以转换为bool类型的prvalue。零值 空指针值,或将空成员指针值转换为 假;其他任何值都将转换为true。用于直接初始化 ,可以将std :: nullptr_t类型的prvalue转换为prvalue 布尔型结果值为false。