在C#中,代码之间是否存在差异(一个声明中的所有声明,而不是较大声明的一部分)arr[0]++;
和++arr[0];
我完全理解,在C / C ++ / Objective-C中,这不会做同样的事情,第一种情况是在arr的第0个索引处得到值并将该值递增1,而第二个,增加arr的指针值,并且不对它的第0个位置做任何事情(与 arr[1]; arr++;
相同)。
感谢某事,他提醒我在C#和C / C ++ / Obj-C中也是如此。
但是,C#中的两个语句之间是否存在差异?
答案 0 :(得分: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
答案 1 :(得分:1)
如果是单一陈述,则没有区别。
答案 2 :(得分:1)
++ x递增然后返回,而x ++返回x的值然后递增! 但如果没有人接受这个价值,那就完全相同了。
答案 3 :(得分:0)
优化编译器应该生成相同的代码,如果该语句本身存在,但是当您使用的是您正在修改内联的值时,后增量可能需要复制(因此您可以使用旧值) ,如果数组的类型具有昂贵的复制构造函数,则可能会很昂贵。