C ++ 11:交换数组名称和索引

时间:2016-12-21 22:56:04

标签: c++ arrays c++11

较旧的编译器允许这种“亵渎神灵”

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成员。因此,尽管外观不对称,   下标是一种可交换的操作。

0 个答案:

没有答案