【问题标题】:What happens when we interchange the arrayname and index like index[arrayname] in C++?当我们在 C++ 中像 index[arrayname] 这样交换数组名和索引时会发生什么?
【发布时间】:2022-01-10 00:28:50
【问题描述】:

当我们在 C++ 中像 index[arrayname] 这样交换数组名和索引时会发生什么? arrayname[index] 和写 index[arrayname] 一样吗?两者的价值是什么?

【问题讨论】:

  • @JohnKugelman 不。这一点在 C 和 C++ 中都是一样的。
  • 如果数组实际上是 std::vectorstd::array 或其他类似数组且运算符重载的类,则它们不能被交换。这个技巧不能很好地转化为 C++。
  • @JohnKugelman 操作员说他们有一个数组,而不是一个向量。这仅适用于数组,所以他们一定一直在使用数组。
  • 我得到的是 C++ 的答案应该是这样的:“如果你有一个普通数组,那么 array[index]index[array] 是可以互换的。但是,这个技巧没有”对于重载 operator[] 的其他类似数组的类型(如 std::arraystd::vector),通常无法正常工作。”当然应该有一堆解释。
  • 我们总是告诉人们 C 和 C++ 是不同的语言。我们不应该将这个 C++ 问题作为 C 问题的副本来结束。答案不同。

标签: c++ arrays


【解决方案1】:

对于内置类型,E1[E2] 的定义“与”*((E1) + (E2))“相同(根据定义)。 (来自 [expr.sub]/1 的引用)所以答案很简单:互换名称没有效果。

对于用户定义的类型,E1 必须是具有重载 operator[] 的类类型,因此,如果没有一些时髦的东西,您不能互换这两个表达式。

【讨论】:

    【解决方案2】:

    它没有任何效果,因为arrayname[index]index[arrayname] 的写法相同,因为两者都被解释为: *(arrayname + index)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-03-18
      • 2019-09-15
      • 2023-01-17
      • 2021-11-06
      • 1970-01-01
      • 2015-09-21
      • 2020-07-18
      相关资源
      最近更新 更多