较旧的编译器允许这种“亵渎神灵”
int a[5];
4[a] = 3;
只是因为operator []允许const表达式并且它们是相同的:
*(4 + a) === *(a + 4)
这是C ++ 11中定义的行为还是UB?
编辑:回答:
除了为类(13.5.5)声明它之外,下标运算符[]的解释方式是E1 [E2]是 与*((E1)+(E2))相同。由于适用的转换规则 to +,如果E1是一个数组而E2是一个整数,那么E1 [E2]指的是 E1的E2成员。因此,尽管外观不对称, 下标是一种可交换的操作。