当我执行这个程序时:
#includeusing namespace std; int main(){ int x=5,y=9; if(++x=y++){ cout<<"Works "< 它工作正常,输出是:Works 9
但如果我执行:
#includeusing namespace std; int main(){ int x=5,y=9; if(x++=y++){ cout<<"Works "< 它声明:在函数'int main()'中:6:11:错误:左值作为赋值的左操作数,如果(x ++ = y ++){
1> BoBTFish..:因为
x++
不是左值.更具体地说,
x++
增量x
,然后返回一个临时的原始值x
.临时对象不能(在一旁可以使用可疑的合法性)在作业的左侧使用,因此它不是左值.
++x
递增x
并返回对x
(使用其新值)的引用.然后,如果您选择,您可以直接分配给它,因此它是一个左值.但是,您可能实际上想要比较两个表达式的相等性,而不是进行赋值.在这种情况下,您需要使用
==
而不是=
.