计算索引时数组超出范围

Array out of range when calculate index

我的一个朋友在网上判断的时候遇到了问题

他写的案例 1(示例)得到了一个错误的答案,并得到了案例 2 的接受。

int a[4];
a[ 2+6-5 ];  //undefined behavior? case 1
a[ 2+(6-5) ];//ok  case 2

根据 C++ std §5.7.5

if a[ 2+6-5 ] == *( a + 2+6-5 ); //ub
if a[ 2+6-5 ] == *( a +(2+6-5)); //not ub

案例1怎么解释?

E1[E2]等同于*((E1)+(E2)),所以在第一种情况下(2+6-5)会先计算。所以不会有问题。

引自N3337 5.2.1 订阅

The expression E1[E2] is identical (by definition) to *((E1)+(E2))