数组下标应为整型表达式
10.10.3 ID_oddSubscripting
C/C++ 语言规定,数组下标可以在中括号的右侧也可以在左侧,然而这只是一种理论上的设计,在实际代码中应采用约定俗成的方式,即数组的名称在中括号的左侧,下标在中括号的右侧。
示例:
void fun() {
int a[5] = {1, 2, 3, 4};
4[a] = 5; // Non-compliant, use a[4] instead
for (int i = 0; i < 4; i++) {
cout << i + 1[a] << '\n'; // Non-compliant, may be a[i + 1]
}
}
由于 a[4] 相当于 *(a+4),所以与其等价的 *(4+a) 也应该可以解释为 4[a],但下标在左侧的写法容易造成运算符优先级相关的问题,将下标写在右侧才是符合惯例的方式。
依据
ISO/IEC 9899:1999 6.5.2.1(2)
ISO/IEC 9899:2011 6.5.2.1(2)
ISO/IEC 14882:2003 8.3.4(6)
ISO/IEC 14882:2011 8.3.4(6)