当我的一个朋友在网上解决一个问题时,我遇到了一个问题。
他写的案例1(例子)得到了一个详细的答案,并得到了接受的案例2。
int a[4];
a[ 2+6-5 ]; //undefined behavior? case 1
a[ 2+(6-5) ];//ok case 2
根据C++性病第5.7.5节
if a[ 2+6-5 ] == *( a + 2+6-5 ); //ub
if a[ 2+6-5 ] == *( a +(2+6-5)); //not ub
我该怎么解释第一个案子?
发布于 2016-03-04 14:21:53
E1[E2]
等同于*((E1)+(E2))
,因此在第一种情况下,将首先计算(2+6-5)
。因此,不会有问题。
引用N3337 5.2.1 Subscripting
表达式E1E2 (定义上)与*((E1)+(E2))相同
https://stackoverflow.com/questions/35798287
复制相似问题