为什么x不是三这个语句不是把y赋值给x然后x在++吗?求解释这个语句的执行过程以及我为什么不能(x+y)++
int x=1,y=2;
++x=y;
然后输出x和y,结果是2、2
原因如下:
int x=1,y=2;// 此时定义了x和y 并且x被赋值1 y被赋值2 此时x=1,y=2
++x=y;//++x是先自增1再执行相关语句,++自增运算符的优先级是要高于赋值运算符的,所以x会先自增1变成2,之后y再赋值给x,y的值是2,所以赋值之后还是2,因此输出时2,2。
希望对题主有所帮助,可以的话,帮忙点个采纳!
++是自增 运算符。++x,是x自增一,最后返回的结果是x自增后的值。x++是x自增1,最后得到x自增前的值。
++的运算优先级高于=,所以先算++x,得到x=2;最后再将y赋值给x。
++是单目运算符,是给一个变量自增用的。所以不能用(x+y)++
++
优先级比=
高,故++x=y
等价于(++x)=y
,C++17之前两个操作数++x
和y
的计算顺序不确定,C++17以后先计算y
,再计算++x
,但不管怎样,++x
返回的是x
左值,最后赋值是把y
的值赋给x
,因此x
和y
的值都是2
表达式(x+y)++
非法,是因为表达式x+y
返回的不是一个左值,而++
运算符只能对左值操作。
https://en.cppreference.com/w/cpp/language/operator_precedence
https://en.cppreference.com/w/cpp/language/eval_order