为什么if(++ x = ++ y)有效,if(x ++ = ++ y)不起作用?

Hop*_*ere -3 c++ operators

当我执行这个程序时:

#include<iostream>
using namespace std;
int main(){
    int x=5,y=9;

    if(++x=y++){
        cout<<"Works "<<x;
    }
    else{
        cout<<"No";
    }
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

它工作正常,输出是:Works 9

但如果我执行:

  #include<iostream>
using namespace std;
int main(){
    int x=5,y=9;

    if(x++=y++){
        cout<<"Works "<<x;
    }
    else{
        cout<<"No";
    }
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

它声明:在函数'int main()'中:6:11:错误:左值作为赋值的左操作数,如果(x ++ = y ++){

BoB*_*ish 5

因为x++不是左值.

更具体地说,x++增量x,然后返回一个临时的原始值x.临时对象不能(在一旁可以使用可疑的合法性)在作业的左侧使用,因此它不是左值.

++x递增x并返回对x(使用其新值)的引用.然后,如果您选择,您可以直接分配给它,因此它是一个左值.

但是,您可能实际上想要比较两个表达式的相等性,而不是进行赋值.在这种情况下,您需要使用==而不是=.