繁体   English   中英

增量和加法运算符优先级,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 ,但是,我在这里看到postfix的优先级高于前缀,那么为什么postfix的增量未完成,返回变量,然后使用前缀对其进行增量? (当我使用方括号时就完成了)

现在回到这一行: int z =(x++)+(++y) 我试图像int z =x+++++y一样写它,但没有用-同样的错误。 然后我尝试了int z =x+++(++y) ,这很好,所以我认为是这样的:

  1. X ++
  2. ++ÿ
  3. 加成

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

那么为什么后缀增量没有完成,返回变量

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

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

这不是优先级的问题,而是编译器解析代码的方式。 要正确编译,您无需使用方括号。 可以在空格处正常工作。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM