数组]在C ++中

这个问题在这里已经有了答案:

  • 对于数组,为什么会出现[5] == 5 [a]? 17个答案
  • 为什么在c ++中x [y] == y [x]? [重复] 3个答案

  • C ++标准§8.3.4,注7(第185页)(强调我的)。

    除了声明为类(13.5.5)外,下标运算符[]被解释为E1[E2]*((E1)+(E2)) 。 由于适用于+的转换规则,如果E1是数组而E2是整数,则E1[E2]指的是E1E2个成员。 因此,尽管外观不对称, 下标是一种交换操作


    这是C ++ 11标准必须说的:

    注意:除了声明类别(13.5.5)外, 下标运算符[]被解释为E1[E2]*((E1)+(E2)) 。 由于适用于+的转换规则,如果E1是数组而E2是整数,则E1[E2]指的是E1E2个成员。 因此,尽管外观不对称,下标是一种交换操作。 (强调加入)。

    因此,假设a[b]被实现为*(a + b)是正确的,除非它直接在编译器中实现,而不是作为宏。


    表达式E1 [E2]与*((E1)+(E2))相同(根据定义)

    ...然后索引和指针的交换性得到保留。 查看您的友好邻域C ++标准,本版本中的第5.2.1节:http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2012/n3485.pdf

    链接地址: http://www.djcxy.com/p/86717.html

    上一篇: array] in the C++

    下一篇: What is 0[p] doing?