数组]在C ++中
这个问题在这里已经有了答案:
C ++标准§8.3.4,注7(第185页)(强调我的)。
除了声明为类(13.5.5)外,下标运算符[]
被解释为E1[E2]
与*((E1)+(E2))
。 由于适用于+
的转换规则,如果E1
是数组而E2
是整数,则E1[E2]
指的是E1
第E2
个成员。 因此,尽管外观不对称, 下标是一种交换操作 。
这是C ++ 11标准必须说的:
注意:除了声明类别(13.5.5)外, 下标运算符[]
被解释为E1[E2]
与*((E1)+(E2))
。 由于适用于+的转换规则,如果E1
是数组而E2
是整数,则E1[E2]
指的是E1
第E2
个成员。 因此,尽管外观不对称,下标是一种交换操作。 (强调加入)。
因此,假设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?