1

在 C# 中,代码(全部在一个语句中,而不是更大语句的一部分)arr[0]++;++arr[0];

我完全理解,在 C/C++/Objective-C 中,这不会做同样的事情,第一种情况会在 arr 的第 0 个索引处获取值并将该值增加 1,而第二种情况会增加指针值arr,并且对它的第 0 个位置没有任何作用(与 相同arr[1]; arr++;)。

多亏了……他提醒了我,这在 C# 和 C/C++/Obj-C 中是一样的。

但是,C# 中的两个语句之间有区别吗?

4

4 回答 4

11

arr[0]++返回 的第一个元素的值arr,然后递增它。

++arr[0]递增 的第一个元素的值arr,然后返回它

仅当您将其用作较长指令的一部分时,差异才有意义。例如 :

arr[0] = 42;
int x = arr[0]++; // x is now 42, arr[0] is now 43

不一样:

arr[0] = 42;
int x = ++arr[0]; // x is now 43, arr[0] is now 43
于 2010-10-19T12:30:48.097 回答
1

如果是单一语句,则没有区别。

于 2010-10-19T12:30:24.860 回答
1

++x 递增然后返回,而 x++ 返回 x 的值然后递增!但如果没有人收到价值,那都是一样的。

于 2010-10-19T12:32:13.973 回答
0

如果该语句本身存在,则优化编译器应该生成相同的代码,但是当您使用内联修改的值时,后增量可能需要制作副本(因此您可以使用旧值),这可以如果数组的类型具有昂贵的复制构造函数,则成本会很高。

于 2010-10-19T12:56:30.167 回答