增量和加法运算符优先级,cpp

时间:2015-09-11 08:07:42

标签: c++ operator-precedence

我有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)它很好,所以我认为发生的是:

  1. X ++
  2. ++ý
  3. 除了
  4. 但如果我是对的,为什么需要括号?这是按优先顺序排列的方式

1 个答案:

答案 0 :(得分:4)

  

那么为什么不能完成后缀增量,返回变量

后缀版本不返回引用,它返回一个值 - 前缀增量只能用于引用。

通过添加括号,您已经更改了评估顺序。