【发布时间】:2017-01-12 07:49:42
【问题描述】:
当我执行这个程序时:
#include<iostream>
using namespace std;
int main(){
int x=5,y=9;
if(++x=y++){
cout<<"Works "<<x;
}
else{
cout<<"No";
}
return 0;
}
它工作正常,输出是: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;
}
它指出: 在函数'int main()'中: 6:11:错误:需要左值作为赋值的左操作数 如果(x++=y++){
【问题讨论】:
-
@BoBTFish 那么
++x是左值吗?奇怪 -
比较运算符是
==,而不是=。所以很难理解你想要完成什么。也就是说,这是一个有趣的问题 -
++x是一个左值,但如果你分配给它,你会调用未定义的行为(在 C 和 C++89 语言中没有插入序列点的两个修改。) -
因为(x++ 和++y) 不是同一类型,需要== 进行比较。
-
你应该删除
ifs,因为它们让每个人都感到困惑。