首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在C程序中,增量运算符是如何计算的?

在C程序中,增量运算符是如何计算的?
EN

Stack Overflow用户
提问于 2020-04-19 00:42:29
回答 2查看 191关注 0票数 0

我有两个表达:

代码语言:javascript
复制
int a=5; 
int c=++a;// c=6, a=6
int b=a++;// b=6, a=7

在第二指令中,首先计算增量,在第三指令中,在赋值后计算增量。

我知道增量操作符具有更高的优先级。有人能向我解释一下为什么在第三个表达式中赋值后才对其进行评估吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-04-19 00:48:49

结果与操作顺序无关,而与前缀++和后缀++的定义有关。

表达式++a的计算值为a的增量值。相反,表达式a++的计算结果是a的当前值,而a作为副作用增加。

C标准的6.5.2.4p2部分说明了关于后缀++的如下内容

后缀++操作符的结果是操作数的值。副作用是,操作数对象的值增加(也就是说,适当类型的值1被添加到它中)。

第6.5.3.1p2节是关于前缀++的如下内容

前缀++运算符的操作数的值递增。结果是递增后操作数的新值。表达式++E等价于(E+=1)

票数 5
EN

Stack Overflow用户

发布于 2020-04-19 00:50:54

++aa++只是不同的运算符,尽管有相同的符号++。一个是前缀增量,一个是后缀增量。与任务相比,这与优先级无关。(就像a - b-a是不同的运算符,尽管有相同的符号-。)

编辑:有人指出这是关于C而不是C++.糟了。因此,如果您只知道C,下面的解释可能会很混乱;您需要知道的是,int&是对int的引用,因此它就像有一个指针,但不需要取消引用,因此在这些函数中修改a实际上会修改传递给函数的变量。

你可以想象它们就像函数:

代码语言:javascript
复制
int prefixIncrement(int& a) {
  return ++a;
}

...is与以下内容相同:

代码语言:javascript
复制
int prefixIncrement(int& a) {
  a += 1;
  return a;
}

和:

代码语言:javascript
复制
int postfixIncrement(int& a) {
  return a++;
}

...is与以下内容相同:

代码语言:javascript
复制
int postfixIncrement(int& a) {
  int old = a;
  a += 1;
  return old;
}

对于吹毛求疵者:是的,实际上我们需要对postfixIncrement__的返回值进行移动语义。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61298159

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档