我有2个问题。
请考虑以下代码:
int x=1,y=2;
int z =(x++)+(++y);
int w = (++x)++;
cout << z << "\t" << w << "\t" << x;
现在,这给了我4,3和4,我猜测w=3
是因为int w = (++x)++
是未定义的行为,这对我来说没问题。我不明白的是:我尝试将此行int w = (++x)++;
写为int w = ++x++;
并获得error: lvalue required as increment operand
,但是,我看到here后缀优先于前缀,那么为什么不是后缀增量完成,返回变量然后用前缀增加它? (当我使用括号时就完成了)
现在回到这一行:int z =(x++)+(++y)
。我试着像int z =x+++++y
那样编写它并且不起作用 - 同样的错误。然后我尝试了int z =x+++(++y)
它很好,所以我认为发生的是:
但如果我是对的,为什么需要括号?这是按优先顺序排列的方式
答案 0 :(得分:4)
那么为什么不能完成后缀增量,返回变量
后缀版本不返回引用,它返回一个值 - 前缀增量只能用于引用。
通过添加括号,您已经更改了评估顺序。