18 c++ increment post-increment
我的兴趣在于for和while循环之间的区别.我知道使用后增量值然后递增,操作返回一个恒定的预增量.
while (true) {
//...
i++;
int j = i;
}
Run Code Online (Sandbox Code Playgroud)
在这里,将j包含循环结束时的旧i或后递增i?
zen*_*hoy 45
由于i ++语句;在您的示例中结束,因此无论使用前增量还是后增量都没有区别.
使用结果时会出现差异:
int j = i++; // i will contain i_old + 1, j will contain the i_old.
Run Code Online (Sandbox Code Playgroud)
VS:
int j = ++i; // i and j will both contain i_old + 1.
Run Code Online (Sandbox Code Playgroud)
Tim*_*Tim 38
取决于你如何使用它们.
i++ 制作副本,增加i,并返回副本(旧值).++i 增加i,然后返回i.在你的例子中,它完全与速度有关.++i将会比i++没有制作副本的速度快.
但是,编译器可能会优化它,因为您没有在示例中存储增量运算符的返回值,但这只适用于像a这样的基本类型int.
Kul*_*var 22
理解的基本答案.增量运算符的工作方式如下:
// ++i
function pre_increment(i) {
i += 1;
return i;
}
// i++
function post_increment(i) {
copy = i;
i += 1;
return copy;
}
Run Code Online (Sandbox Code Playgroud)
一个好的编译器会自动更换i++与++i当检测到返回的值将不会被使用.
在预增量中,首先递增初始值,然后在表达式内使用.
a = ++i;
Run Code Online (Sandbox Code Playgroud)
在这个例子中假设变量的值i是5,那么变量的值a将是6,因为i在表达式中使用它之前,会修改值.
在Post-Increment中,值首先在表达式中使用,然后递增.
a = i++;
Run Code Online (Sandbox Code Playgroud)
在这个例子中假设变量的值i是5,那么变量的值a将是5,因为,i只有在赋值5之后,gets的值才会增加a.
小智 5
#include <stdlib.h>
#include <stdio.h>
int main(int argc, char **argp)
{
int x = 5;
printf("x=%d\n", ++x);
printf("x=%d\n", x++);
printf("x=%d\n", x);
return EXIT_SUCCESS;
}
Run Code Online (Sandbox Code Playgroud)
程序输出:
x=6
x=6
x=7
Run Code Online (Sandbox Code Playgroud)
在第一个 printf 语句中,x 在传递给 printf 之前递增,因此输出值 6,在第二个中 x 传递给 printf(因此输出 6)然后递增,第三个 printf 语句仅显示前一个后递增通过再次输出 x 现在具有值 7 的语句。