我正在编写一个简单的代码来按后序迭代打印二叉树,但我偶然发现了这个奇怪的调试步骤:
图像未经过任何方式的 Photoshop 或修改,“locals”窗口显示两个指针具有不同的值,但是当将它们与自身和 NULL 进行比较时,相等返回 true 和“Wat??”打印出来了,怎么会??
我错过了什么吗?
如果我将其重写为
if(pointer1 == NULL && pointer2 == NULL)
cout << "This won't be printed";
正常运行
相等比较运算符 (operator ==
) 是一个二元运算符,它与左边相关联。因此,您的情况:
pointer1 == pointer2 == NULL
变成:
(pointer1 == pointer2) == NULL
,变成:
true == NULL
如果 (pointer1 == pointer2)
;或
false == NULL
如果 (pointer1 != pointer2)
。
由于 NULL
转换为 bool 值 false
,当且仅当 pointer1 != pointer2
时,此条件计算为 true
>.
如您所见,这与:
(pointer1 == NULL && pointer2 == NULL)
当且仅当 pointer1
和 pointer2
都不为 NULL
时,它的计算结果为 true
。