增量运算符++和加法+运算符有什么区别?为什么我们不能用++代替+呢?
与+/-相比,++/--运算符的优势是什么?它们具体适用于什么地方?
发布于 2013-01-31 05:26:51
x++;
v.s.
x = x + 1;主要的优势来自于前增量与后增量:
例如:
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主要的缺点是像这样的东西
a = ++x + x--;是未定义的行为。完全依赖于编译器,对于任何试图找出"bug“的人来说,这将使他们的生活陷入地狱。
发布于 2013-01-31 05:33:21
C标准给出的唯一区别是x的评估次数。对于正态变量,差异通常无关紧要。如果编译器可以证明,在x = x + 1中,x的两次求值应该给出相同的值,那么它可能会对此进行优化。
例如,如果x被声明为易失性的,或者涉及函数的求值,则必须执行两次求值。示例:
unsigned* f(void);然后
*f() = *f() + 1;完全不同于
++(*f());发布于 2013-01-31 10:24:14
一元运算符(++,--)主要是为了方便-例如,编写x++比编写x = x + 1更容易。
++还可用于执行“前增量”或“后增量”。如果您编写x++,则x的值将增加,并返回x的原始值。例如:
int a = 0;
int x = 0;
a = x++; // x is now equal to 1, but a is equal to 0.如果写入++x,x仍会递增,但会返回新值:
int a = 0;
int x = 0;
a = ++x; // Both a and x now equal 1.在编译器的实现中通常也有一些细微的不同。Post-increment (x++)会这样做:
为临时变量variable
x
x创建一个临时变量而预增量(++x)会做这样的事情:
xx因此,使用前增量比后增量需要更少的操作,但在现代系统中,这通常不会成为优化代码的一种合适的方式。
https://stackoverflow.com/questions/14614058
复制相似问题