首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >增量运算符(++)和加法运算符(+)的区别是什么?

增量运算符(++)和加法运算符(+)的区别是什么?
EN

Stack Overflow用户
提问于 2013-01-31 05:23:11
回答 8查看 2.6K关注 0票数 1

增量运算符++和加法+运算符有什么区别?为什么我们不能用++代替+呢?

+/-相比,++/--运算符的优势是什么?它们具体适用于什么地方?

EN

回答 8

Stack Overflow用户

发布于 2013-01-31 05:26:51

x++;

v.s.

代码语言:javascript
复制
x = x + 1;

主要的优势来自于前增量与后增量:

例如:

代码语言:javascript
复制
x = 1;
y = 1;

a = x + 1; // a is 2, x  is 1  - e.g. does not modify x

a = ++x;   // a is 1, x is 2
b = y++;   // b is 2, y is 2

主要的缺点是像这样的东西

代码语言:javascript
复制
a = ++x + x--;

是未定义的行为。完全依赖于编译器,对于任何试图找出"bug“的人来说,这将使他们的生活陷入地狱。

票数 4
EN

Stack Overflow用户

发布于 2013-01-31 05:33:21

C标准给出的唯一区别是x的评估次数。对于正态变量,差异通常无关紧要。如果编译器可以证明,在x = x + 1中,x的两次求值应该给出相同的值,那么它可能会对此进行优化。

例如,如果x被声明为易失性的,或者涉及函数的求值,则必须执行两次求值。示例:

代码语言:javascript
复制
unsigned* f(void);

然后

代码语言:javascript
复制
*f() = *f() + 1;

完全不同于

代码语言:javascript
复制
++(*f());
票数 2
EN

Stack Overflow用户

发布于 2013-01-31 10:24:14

一元运算符(++,--)主要是为了方便-例如,编写x++比编写x = x + 1更容易。

++还可用于执行“前增量”或“后增量”。如果您编写x++,则x的值将增加,并返回x的原始值。例如:

代码语言:javascript
复制
int a = 0;
int x = 0;
a = x++;  //  x is now equal to 1, but a is equal to 0.

如果写入++x,x仍会递增,但会返回新值:

代码语言:javascript
复制
int a = 0;
int x = 0;
a = ++x;  //  Both a and x now equal 1.

在编译器的实现中通常也有一些细微的不同。Post-increment (x++)会这样做:

为临时变量variable

  • Increment x

  • Return
  • x创建一个临时变量

而预增量(++x)会做这样的事情:

  • Increment x
  • Return x

因此,使用前增量比后增量需要更少的操作,但在现代系统中,这通常不会成为优化代码的一种合适的方式。

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

https://stackoverflow.com/questions/14614058

复制
相关文章

相似问题

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