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

increment and addition operators precedence, cpp

我有两个问题。
考虑这段代码:

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 后缀优先于前缀,那么为什么不完成后缀增量,returns 变量然后用前缀递增它? (就像我使用括号时所做的那样)

现在回到这一行:int z =(x++)+(++y)。我试着像 int z =x+++++y 这样写,但没有用——同样的错误。然后我尝试 int z =x+++(++y) 没问题,所以我认为发生的事情是这样的:

  1. x++
  2. ++y
  3. 加法

但如果我是对的,为什么需要括号?优先级应该是这样

这不是优先级的问题,而是编译器解析代码的方式。 要正确编译,您不需要使用括号。可以很好地处理空格。

so why the isn't the postfix increment done, returns the variable

后缀版本 return 不是引用,它 return 是一个值 - 前缀增量只能与引用一起使用。

通过添加括号,您更改了计算顺序。