[英]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
,但是,我在这里看到postfix的优先级高于前缀,那么为什么postfix的增量未完成,返回变量,然后使用前缀对其进行增量? (当我使用方括号时就完成了)
现在回到这一行: int z =(x++)+(++y)
。 我试图像int z =x+++++y
一样写它,但没有用-同样的错误。 然后我尝试了int z =x+++(++y)
,这很好,所以我认为是这样的:
但是如果我是对的,为什么需要括号呢? 这是应该优先的方式
那么为什么后缀增量没有完成,返回变量
后缀版本不返回引用,而是返回一个值-前缀增量只能与引用一起使用。
通过添加括号,您已经更改了评估顺序。
这不是优先级的问题,而是编译器解析代码的方式。 要正确编译,您无需使用方括号。 可以在空格处正常工作。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.