i ++和++ i之间有区别吗?

时间:2011-03-03 21:25:46

标签: c++

  

可能重复:
  What is more efficient i++ or ++i?

这些之间没有区别:

i++;
++i;

但是当他们这样使用时:

anArray[ i++ ] = 0;
anArray[ ++i ] = 0;

有区别吗?

待编辑: 感谢

6 个答案:

答案 0 :(得分:3)

非常。

i++ -> use i first and then increment it's value
++i -> increment i first and then use i's new value

答案 1 :(得分:2)

i++ uses the value and then increments it.
++i increments the value and then uses it.

答案 2 :(得分:2)

假设i=3

anArray[ i++ ] = 0;

将数组索引3处的元素设置为0。

anArray[ ++i ] = 0;

将数组索引4处的元素设置为0。

答案 3 :(得分:1)

所有关于操作的顺序:

E.g。

int i = 1;
int a = i++;

相当于:

int i = 1;
int a = i;
i++;

相反的是:

int i = 1;
i++;
int a = i;

请注意,这些语句在C ++中是未定义的。

int i = 0;
i = i++;

答案 4 :(得分:0)

是的!差别很大!

执行代码行之后

i++递增i 表达式被评估。 ++i之前会增加它。例如:

int i = 2;
printf("%i\n", i++); //prints "2"
printf("%i\n", i);   //prints "3"

与:比较:

int i = 2;
printf("%i\n", ++i); //prints "3"
printf("%i\n", i);   //prints "3"

我听说++i的速度要快得多。 Here就更多了。

希望这有帮助!

更新2:已杀死上次更新,因为代码在技术上具有未定义的行为。这个故事的道德:不要使用foo(i, ++i)foo(++i, ++i)foo(i++, i)等,甚至array[i] = ++iYou don't know what order the expressions get evaluated in!

答案 5 :(得分:0)

如果您将它们用作语句,则输出没有区别。但如果你用它们作为表达,那么就会有一个微妙的区别。

如果anArray[ i++ ] = 0; i在分配完成后递增。而在anArray[ ++i ] = 0; i的情况下,在分配完成之前递增。

例如i = 0anArray[ i++ ] = 0;anArray[ 0 ]设为0i将增加为1。但是,如果您使用anArray[ ++i ] = 0;,则anArray[ 1 ]设置为0,因为i已经增加。