这个小c ++代码背后的逻辑是什么?

Ara*_*hya 3 c++

#include <iostream>
using namespace std;

int main()
{
    int j=20;
    int i=0;
    for ( int k=0; i<10 && j>10; i++ && j--)
        cout<< "i is " <<i<< " and j is " <<j<<endl;
}
Run Code Online (Sandbox Code Playgroud)

所以,这就是我看到它,首先i是0并且j是20,两者都遵循条件,因此输出是"0 20",然后i递增并j递减,因此输出应该是"1 19"但下一个输出是"1 20",好像j没有已经减少了!为什么?

Mat*_*att 11

i==0,i++ && j-- 短路它第一次被调用,所以你最终i==1j==20.

您可以使用逗号运算符来解决此问题:i++, j--.

请记住,在C/C++中,0被认为是假的,所以0 && x永远不会评估,x因为它知道表达式是假的.有关详细信息,请参阅上面的链接.