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