++
增量运算符和加法运算符有什么区别+
?为什么我们不能使用+
代替++
?
++
/--
运算符比+
/有什么优势-
?它们究竟适用于什么地方?
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--;
是未定义的行为。完全依赖于编译器,任何试图找出“错误”的人都会陷入困境。
C 标准给出的唯一区别是x
. 对于正常变量,差异通常无关紧要。如果编译器可以证明在x = x + 1
的两个评估中x
应该给出相同的值,它可能会优化它。
如果x
例如声明为 volatile 或涉及对函数的评估,则评估必须进行两次。例子:
unsigned* f(void);
然后
*f() = *f() + 1;
与
++(*f());
一元运算符 (++, --) 主要是为了方便 - 例如,它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
因此,使用前置增量需要的操作比后置增量要少,但在现代系统中,这通常不会成为优化代码的一种体面的方式。
++
是一种方便的语法。它并没有真正为语言增加功能,但它增加了一种更简洁地编写一些常见操作的方式。
作为一个独立的语句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
,然后递增a
。a=a+1
表格在增量之后产生值,a
所以如果你需要原始值,你需要一个单独的语句来首先处理它。
您实际上可以使用加法:
a = a + 1
但大多数人更喜欢较短的版本。在某些语言中,它实际上避免了将值复制到新位置的需要,但正如 nneonneo 有帮助地指出的那样,C 编译器可能会为您优化这一点。
“++”表示“加一”,例如
int x = 5;
x++; // the same as x = x + 1
cout << x; // will print 6
“+”是已知的加号运算符
使用增量运算符(即 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
在寄存器上进行增量,但通过 ALU 进行加法,我们可以使用 + 而不是增量,但增量更快