增量运算符(++)和加法(+)运算符之间有什么区别?为什么我们不能使用+而不是++?

时间:2013-01-30 21:23:11

标签: c

增量运算符(++)和加法(+)运算符之间有什么区别?为什么我们不能用+而不是++?

++ / - 运营商优于+/-的优势是什么?它究竟应用于何处? 我是C的新手....请解释......

8 个答案:

答案 0 :(得分:4)

X ++;

v.s。

x = x + 1;

主要优势来自预增量vs.后增量:

e.g。

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”的人都会生活地狱。

答案 1 :(得分:2)

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

如果x例如声明为volatile或涉及函数的评估,则评估必须完成两次。例如:

unsigned* f(void);

然后

*f() = *f() + 1;

完全不同
++(*f());

答案 2 :(得分:0)

++是一种方便的语法。它并没有真正增加语言的功能,但它增加了一种更简洁地编写一些常见操作的方法。

独立陈述a++;a+=1;相同,与a=a+1相同;

a++在某些情况下非常有用,否则需要两个语句:

while (a < N) doSomethingWith(a++);

只是

的缩写形式
while (a<N) 
{
   doSomethingWith(a); 
   a=a+1;
}

我不认为你可以用a++写一些你不能用a=a+1写的东西,但你不能只做一对一的替换。有时第二种形式需要更多的代码才能相同,因为第一种形式执行两件事:产生a的值,然后增加aa=a+1表单在增量后生成a的值,因此如果需要原始值,则需要单独的语句来处理该值。

答案 3 :(得分:0)

你实际上可以使用加法:

a = a + 1

但大多数人更喜欢较短的版本。在某些语言中,它实际上避免了将值复制到新位置的需要,但正如nneonneo指出的那样,C编译器可能会为您优化这一点。

答案 4 :(得分:0)

“++”表示“加一” 例如

int x = 5;
x++;  // the same as x = x + 1
cout << x; // will print 6

“+”是已知的加号运算符

答案 5 :(得分:0)

一元运算符(++, - )主要是为了方便起见 - 例如,编写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仍会递增,但会返回 new 值:

int a = 0;
int x = 0;
a = ++x;  //  Both a and x now equal 1.

编译器的实现通常也存在细微差别。后增量(x++)将执行以下操作:

  • 创建临时变量
  • x复制到临时变量
  • 增量x
  • 返回临时变量

而预增量(++x)将执行以下操作:

  • 增量x
  • 返回x

因此,使用预增量需要的操作少于后增量,但在现代系统中,这通常不会成为优化代码的好方法。

答案 6 :(得分:0)

使用增量运算符(即 value++)与使用加法运算符(即 value + 1)的区别在于,第一个运算符有时会导致突变,尤其是在我们访问函数内部的全局变量时;

使用增量运算符。

// The global variable
var fixedValue = 4;

function incrementer () {
  // Only change code below this line

  return fixedValue ++;
  // Only change code above this line
}
var newValue = incrementer(); // Should equal 5
console.log(fixedValue); // Should print 5

使用加法运算符。

// The global variable
var fixedValue = 4;

function incrementer () {
  // Only change code below this line

  return fixedValue + 1;
  // Only change code above this line
}
var newValue = incrementer(); // Should equal 5
console.log(fixedValue); // Should print 4

答案 7 :(得分:-1)

在寄存器上进行递增但是ALU的加法可以使用+而不是增量但增量更快