增量运算符(++)和加法(+)运算符之间有什么区别?为什么我们不能用+而不是++?
++ / - 运营商优于+/-的优势是什么?它究竟应用于何处? 我是C的新手....请解释......
答案 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 + 1
中x
的两个评估应该给出相同的值,那么它可能会优化它。
如果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
的值,然后增加a
。 a=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的加法可以使用+而不是增量但增量更快