计算索引时,数组超出范围

时间:2016-03-04 14:16:52

标签: c++ arrays undefined-behavior

当我的一位朋友解决在线裁判问题时,我遇到了问题。

他写了案例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?

1 个答案:

答案 0 :(得分:0)

E1[E2]相当于*((E1)+(E2)),因此在第一种情况下,(2+6-5)将首先计算。因此没有问题。

引自N3337 5.2.1订阅

  

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