递增和加法运算符优先级,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)
没问题,所以我认为发生的事情是这样的:
- x++
- ++y
- 加法
但如果我是对的,为什么需要括号?优先级应该是这样
这不是优先级的问题,而是编译器解析代码的方式。
要正确编译,您不需要使用括号。可以很好地处理空格。
so why the isn't the postfix increment done, returns the variable
后缀版本 return 不是引用,它 return 是一个值 - 前缀增量只能与引用一起使用。
通过添加括号,您更改了计算顺序。
我有两个问题。
考虑这段代码:
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)
没问题,所以我认为发生的事情是这样的:
- x++
- ++y
- 加法
但如果我是对的,为什么需要括号?优先级应该是这样
这不是优先级的问题,而是编译器解析代码的方式。 要正确编译,您不需要使用括号。可以很好地处理空格。
so why the isn't the postfix increment done, returns the variable
后缀版本 return 不是引用,它 return 是一个值 - 前缀增量只能与引用一起使用。
通过添加括号,您更改了计算顺序。