三重平等条件带来奇怪的结果

Joh*_*ing 0 c++ debugging visual-studio-2012

我正在编写一个简单的代码来按顺序迭代打印二叉树,但我偶然发现了这个奇怪的调试步骤:

在此输入图像描述

图像没有以任何方式进行photoshopped或修改,"locals"窗口显示两个指针都有不同的值,但在将它们与自身进行比较并且与NULL进行比较时,相等性返回true并且"Wat ??" 被打印出来,怎么样?

我错过了什么吗?

如果我把它重写为

if(pointer1 == NULL && pointer2 == NULL)
    cout << "This won't be printed";
Run Code Online (Sandbox Code Playgroud)

它工作正常

And*_*owl 10

等式比较运算符(operator ==)是一个与左侧相关联的二元运算符.因此,你的条件:

pointer1 == pointer2 == NULL

变为:

(pointer1 == pointer2) == NULL,成为:

true == NULL如果(pointer1 == pointer2); 要么

false == NULL如果(pointer1 != pointer2).

由于NULL转换为布尔值false,此条件将求值为trueif且仅当if pointer1 != pointer2.

如您所见,这与以下内容非常不同:

(pointer1 == NULL && pointer2 == NULL)
Run Code Online (Sandbox Code Playgroud)

评估true当且仅当两者pointer1都不pointer2NULL.