【问题标题】:Difference between arr[0]++ and ++arr[0]arr[0]++ 和 ++arr[0] 的区别
【发布时间】:2011-04-27 11:12:18
【问题描述】:

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

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

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

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

【问题讨论】:

  • val++++val的区别相同。
  • 好的,我只是想确保没有像 C/C++/Obj-C 中的某种差异...我是 parinoid :)
  • 和C/C++/etc完全一样。相同的区别。
  • 但是在这些语言中++ 运算符的优先级不是比索引运算符高吗?
  • 前缀 ++ 在 C 和 C++ 中的优先级低于 [] 数组下标,因此它也会修改数组中的值,而不是 arr 本身。 (例如参见cppreference.com/wiki/operator_precedence

标签: c# arrays post-increment pre-increment


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

      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
      

      【讨论】:

      • 是的,但是这意味着如果它是一个单一的语句没有区别,对吧?
      【解决方案4】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2010-11-18
        • 2020-07-10
        • 2019-12-19
        • 2012-12-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-09-16
        相关资源
        最近更新 更多