这个C ++代码是否产生未定义的行为?
这个问题在这里已经有了答案:
这是完全合法的。 使用指针运算, a[42]
等价于*(a + 42)
,其中(加法是可交换的)相当于*(42+ a)
,其(根据[]
的定义等价于42[a]
。
所以这是不明确的,但明确的。
数组运算符是可交换的。
a[n] == *(a + n) == *(n + a) == n[a]
这完全合法。
a[i]
被定义为*(a+i)
。
所以42[a]
= a[42];
而且它非常安全