这个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]; 而且它非常安全
