为什么是'if(1 == 1 == 1 == 1 == 1);' TRUE 但'if(-1 == -1 == -1 == -1 == -1);' 错误的?

Gam*_*der 2 c++ if-statement short-circuiting

if (1 == 1 == 1 == 1 == 1)
    std::cout << "right";
Run Code Online (Sandbox Code Playgroud)

上面的代码显示“正确”。

if (-1 == -1)
    std::cout << "right";
Run Code Online (Sandbox Code Playgroud)

上面的代码也显示“正确”。

if (-1 == -1 == -1)
    std::cout << "right";
Run Code Online (Sandbox Code Playgroud)

上面的代码什么也没显示。(这是因为if statement我猜这不是真的?)

我想知道为什么会发生这种奇怪的事情。

因为-1等于-1并且无论我重复多少次(据我所知),该语句始终为真。

asm*_*mmo 9

条件从左到右计算,因此以下条件语句

if (-1 == -1 == -1)
    std::cout << "right";
Run Code Online (Sandbox Code Playgroud)

相当于

if (true == -1)//since -1 === -1
    std::cout << "right";
Run Code Online (Sandbox Code Playgroud)

相当于

if (1 == -1) // true is casted to 1
    std::cout << "right";
Run Code Online (Sandbox Code Playgroud)

相当于

if (false)
    std::cout << "right";
Run Code Online (Sandbox Code Playgroud)

所以语句std::cout << "right";不执行是正常的,你什么也得不到。