计算索引时数组超出范围
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))
我的一个朋友在网上判断的时候遇到了问题
他写的案例 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))