C# arr[0]和#x2B之间的差异+;和++;arr[0]

C# arr[0]和#x2B之间的差异+;和++;arr[0],c#,arrays,post-increment,pre-increment,C#,Arrays,Post Increment,Pre Increment,在C#中,代码(全部在一条语句中,而不是较大语句的一部分)与arr[0]++之间是否有差异和++arr[0] P>我完全理解,在C/C++ +ObjuleC中,这不会做同样的事情,第一种情况会得到ARR的零索引值和增量值一个,而第二个则增加ARR的指针值,并且对它的零个位置没有任何作用(与 ARR [1 ];ARR++;< /C> >相同。 由于某事,他提醒我C和C/C++ +Obj-C.< 但是,C#?中的两条语句之间是否有差异?如果是一条语句,则没有差异。如果是一条语句,则没有差异。arr

在C#中,代码(全部在一条语句中,而不是较大语句的一部分)与arr[0]++之间是否有差异
++arr[0]

<> P>我完全理解,在C/C++ +ObjuleC中,这不会做同样的事情,第一种情况会得到ARR的零索引值和增量值一个,而第二个则增加ARR的指针值,并且对它的零个位置没有任何作用(与<代码> ARR [1 ];ARR++;< /C> >相同。 由于某事,他提醒我C和C/C++ +Obj-C.<
但是,C#?

中的两条语句之间是否有差异?如果是一条语句,则没有差异。

如果是一条语句,则没有差异。

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

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

++x递增然后返回,而x++返回x的值然后递增!
但是如果没有人接收该值,则一切都是一样的。

++x递增然后返回,而x++返回x的值然后递增!
但是,如果没有人接收该值,则一切都是一样的。

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

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

val++
++val
的区别相同。好的,我只是想确保没有像C/C++/Obj-C中那样的区别。。。我是Primo::它与C/C++/.等完全相同。但是,<代码> ++> /Cux>运算符比那些语言中的索引操作符有更多的优先权吗?前缀<代码> ++> /COD>比C++和C++中的代码> > [COD] >数组下标的优先级低,因此它也修改了数组中的值,不是arr本身。(例如,请参阅)与
val++
++val
相同的差异。好的,我只是想确保没有像C/C++/Obj-C中那样的差异。。。我是Primo::它与C/C++/.等完全相同。但是,<代码> ++> /Cux>运算符比那些语言中的索引操作符有更多的优先权吗?前缀<代码> ++> /COD>比C++和C++中的代码> > [COD] >数组下标的优先级低,因此它也修改了数组中的值,不是arr本身。(例如)是的,但这意味着如果它是一个单语句,就没有区别,对吗?是的,但这意味着如果它是一个单语句,就没有区别,对吗?