当我的一位朋友解决在线裁判问题时,我遇到了问题。
他写了案例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?
答案 0 :(得分:0)
E1[E2]
相当于*((E1)+(E2))
,因此在第一种情况下,(2+6-5)
将首先计算。因此没有问题。
引自N3337 5.2.1订阅
表达式E1 [E2]与*((E1)+(E2))相同(根据定义)