1

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

++/--运算符比+/有什么优势-?它们究竟适用于什么地方?

4

8 回答 8

4

x++;

对比

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--;

是未定义的行为。完全依赖于编译器,任何试图找出“错误”的人都会陷入困境。

于 2013-01-30T21:26:50.763 回答
2

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

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

unsigned* f(void);

然后

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

++(*f());
于 2013-01-30T21:33:21.233 回答
1

一元运算符 (++, --) 主要是为了方便 - 例如,它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.

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

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

而 pre-increment ( ++x) 会做这样的事情:

  • 增量x
  • 返回x

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

于 2013-01-31T02:24:14.373 回答
0

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

作为一个独立的语句a++;是相同的,a+=1;是相同的a=a+1

a++在某些需要两个语句的情况下可能很有用:

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

只是一种较短的形式

while (a<N) 
{
   doSomethingWith(a); 
   a=a+1;
}

我不认为你可以用 an 写任何你不能用 ana++写的东西a=a+1,但你不能只做 1 对 1 的替换。有时,第二种形式需要更多代码才能等效,因为第一种形式执行两件事:产生 的值a,然后递增aa=a+1表格在增量之后产生值,a所以如果你需要原始值,你需要一个单独的语句来首先处理它。

于 2013-01-30T21:25:20.683 回答
0

您实际上可以使用加法:

a = a + 1

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

于 2013-01-30T21:26:00.720 回答
0

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

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

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

于 2013-01-30T21:29:21.560 回答
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
于 2021-07-01T07:48:17.027 回答
-1

在寄存器上进行增量,但通过 ALU 进行加法,我们可以使用 + 而不是增量,但增量更快

于 2013-01-30T21:25:49.173 回答