Stackoverflow热门问题(四)-++i与i++有何不同?
stackoverflow热门问题目录经过三次修改格式的劳累,我体会到了重复性劳动的痛苦。
所以这次是我用python爬的,并转换的。
而且这个爬虫是我一天写好的(虽然花了两天但第一天实际只是稍微摸了一下子)。
这个爬虫我后续会发文章出来,但根据目前待发的文章数量,应该要等到下个月。
++i与i++有何不同?
- The.Anti.9 asked:
- 在C中,
++i
与i++
有何区别?如果作为自增用在for
循环中,哪个比较好?
- 在C中,
- Answers:
- Mark Harrison - 1221位用户认为有用
- ++i会将i值增加,并返回增加后的值。
i = 1; j = ++i; (i is 2, j is 2)
i++
会将i值增加,并返回增加前的值。i = 1; j = i++; (i is 2, j is 1)
- 对于for循环,两个都可以用。但++i更普遍,因为K&R是这么用的(The C Programming Language)。
- 用
++i
而不是i++
,会出现更少的错误。 - 关于++i与i++有两条相关注释。在任何非学生项目编译器(non-student-project compiler)中,它们效率一致。可以试着观察编译器对其生产的代码,很容易证实这点。
- 译者注:这里的non-student-project compiler译成非学生项目编译器似乎有点奇怪,但根据答主后续的说法,感觉这是在表达:只有被学生当成项目做的编译器,才会出现i++与++i效率不同的情况。
- 换句话说,答主的意思应该是:但凡是个正常编译器来编译,他们效果都不会有差。
- 效率问题的确很有趣...可以参见我在这篇的回答:Is there a performance difference between i++ and ++i in C?
- 译者注:这里答主发的链接也能作为佐证,答主在linux中创建了一个仅i++与++i不同的for循环,并比较了编译文件的MD5,它们是一样的。
- 正如@OnFreund指出的那样,C++的对象中,这两者是有不同的,因为
operator++()
是一个函数,并且编译器不知道去优化临时对象的创建,以至于产生了中间变量。
- Parag - 202位用户认为有用
i++
被称为后增量,++i
则被称为先增量。i++
i++
是后增量,因为它会在操作结束后再对i加1.- 例如下面这个例子:
int i = 1, j;j = i++;
- 结果是
j = 1
且i = 2
。这是因为i
先分配给了j
后,才被增加。 ++i
++i
是先增量,因为它会在操作前将i加1;换句话说,j = i
会在i++
执行后才执行。- 例如下面这个例子:
int i = 1, j;j = ++i;
- 这里的值是
j = 2
且i = 2
。这是因为i的值增加后,才被分配给j。就像先执行++i
再执行j = i
一样。 - 而对于题主关于其在for循环中效率的提问。答案是随便选择,因为它们会使用相同的时间。
for(i=0; i<5; i++) printf("%d ",i);
- 以及
for(i=0; i<5; ++i) printf("%d ",i);
- 两个循环都产生一样的输出:0 1 2 3 4。
- 这种情况下不同:
for(i = 0; i<5;) printf("%d ",++i);
- 他会输出1 2 3 4 5。
- Andy Lester - 47位用户认为有用
- 不用担心哪个效率更快,编译器会负责它们的。只要能保证可读性,随便用什么都可以。
- Mark Harrison - 1221位用户认为有用
What is the difference between ++i and i++?
- The.Anti.9 asked:
- In C, what is the difference between using
++i
andi++
, and which should be used in the incrementation block of afor
loop?- 在C中,
++i
与i++
有何区别?如果作为自增用在for
循环中,哪个比较好?
- 在C中,
- In C, what is the difference between using
- Answers:
- Mark Harrison - 1221位用户认为有用
++i
will increment the value ofi
, and then return the incremented value.- ++i会将i值增加,并返回增加后的值。
i = 1; j = ++i; (i is 2, j is 2)
i++
will increment the value ofi
, but return the original value thati
held before being incremented.i++
会将i值增加,并返回增加前的值。
i = 1; j = i++; (i is 2, j is 1)
- For a
for
loop, either works.++i
seems more common, perhaps because that is what is used in K&R.- 对于for循环,两个都可以用。但++i更普遍,因为K&R是这么用的(The C Programming Language)。
- In any case, follow the guideline "prefer
++i
overi++
" and you won't go wrong.- 用
++i
而不是i++
,会出现更少的错误。
- 用
- There's a couple of comments regarding the efficiency of
++i
andi++
. In any non-student-project compiler, there will be no performance difference. You can verify this by looking at the generated code, which will be identical.- 关于++i与i++有两条相关注释。在任何非学生项目编译器(non-student-project compiler)中,它们效率一致。可以试着观察编译器对其生产的代码,很容易证实这点。
- 译者注:这里的non-student-project compiler译成非学生项目编译器似乎有点奇怪,但根据答主后续的说法,感觉这是在表达,只有被学生当成项目做的编译器,才会出现i++与++i效率不同的情况。
- 换句话说,答主的意思应该是:但凡是个正常编译器来编译,他们效果都不会有差。
- 关于++i与i++有两条相关注释。在任何非学生项目编译器(non-student-project compiler)中,它们效率一致。可以试着观察编译器对其生产的代码,很容易证实这点。
- The efficiency question is interesting... here's my attempt at an answer:Is there a performance difference between i++ and ++i in C?
- 效率问题的确很有趣...可以参见我在这篇的回答:Is there a performance difference between i++ and ++i in C?
- 译者注:这里答主发的链接也能作为佐证,答主在linux中创建了一个仅i++与++i不同的for循环,并比较了编译文件的MD5,它们是一样的。
- 效率问题的确很有趣...可以参见我在这篇的回答:Is there a performance difference between i++ and ++i in C?
- As @OnFreund notes, it's different for a C++ object, since
operator++()
is a function and the compiler can't know to optimize away the creation of a temporary object to hold the intermediate value.- 正如@OnFreund指出的那样,C++的对象中,这两者是有不同的,因为
operator++()
是一个函数,并且编译器不知道去优化临时对象的创建,以至于产生了中间变量。
- 正如@OnFreund指出的那样,C++的对象中,这两者是有不同的,因为
- Parag - 202位用户认为有用
- i++ is known as Post Increment whereas ++i is called Pre Increment.
i++
被称为后增量,++i
则被称为先增量。
i++
i++
is post increment because it incrementsi
's value by 1 after the operation is over.i++
是后增量,因为它会在操作结束后再对i加1.
- Lets see the following example:
- 例如下面这个例子:
int i = 1, j;j = i++;
- Here value of
j = 1
buti = 2
. Here value ofi
will be assigned toj
first theni
will be incremented.- 结果是
j = 1
且i = 2
。这是因为i
先分配给了j
后,才被增加。
- 结果是
++i
++i
is pre increment because it incrementsi
's value by 1 before the operation.It meansj = i;
will execute afteri++
.++i
是先增量,因为它会在操作前将i加1;换句话说,j = i
会在i++
执行后才执行。
- Lets see the following example:
- 例如下面这个例子:
int i = 1, j;j = ++i;
- Here value of
j = 2
buti = 2
. Here value ofi
will be assigned toj
after thei
incremention ofi
.Similarly++i
will be executed beforej=i;
.- 这里的值是
j = 2
且i = 2
。这是因为i的值增加后,才被分配给j。就像先执行++i
再执行j = i
一样。
- 这里的值是
- For your question which should be used in the incrementation block of a for loop? the answer is, you can use any one.. doesn't matter. It will execute your for loop same no. of times.
- 而对于题主关于其在for循环中效率的提问。答案是随便选择,因为它们会使用相同的时间。
for(i=0; i<5; i++) printf("%d ",i);
- And
- 以及
for(i=0; i<5; ++i) printf("%d ",i);
- Both the loops will produce same output. ie
0 1 2 3 4
.- 两个循环都产生一样的输出:0 1 2 3 4。
- It only matters where you are using it.
- 这种情况下不同:
for(i = 0; i<5;) printf("%d ",++i);
- In this case output will be
1 2 3 4 5
.- 他会输出1 2 3 4 5。
- i++ is known as Post Increment whereas ++i is called Pre Increment.
- Andy Lester - 47位用户认为有用
- Please don't worry about the "efficiency" (speed, really) of which one is faster. We have compilers these days that take care of these things. Use whichever one makes sense to use, based on which more clearly shows your intent.
- 不用担心哪个效率更快,编译器会负责它们的。只要能保证可读性,随便用什么都可以。
- Please don't worry about the "efficiency" (speed, really) of which one is faster. We have compilers these days that take care of these things. Use whichever one makes sense to use, based on which more clearly shows your intent.
- Mark Harrison - 1221位用户认为有用
共有 0 条评论