这怎么可能是有效的 C++?
void main()
{
int x = 1["WTF?"];
}
在 VC++10 上编译,在调试模式下,x
语句后的值为 84。
这是怎么回事?
数组下标运算符是可交换的。它等价于int x = "WTF?"[1];
Here, "WTF?"
is an array of 5 char
s(它包括空终止符),并[1]
为我们提供了第二个字符,即'T'
- 隐式转换为int
它的值 84。
题外话:代码片段不是有效的 C++,实际上 -main
必须返回int
。
您可以在此处阅读更深入的讨论:在 C 数组中,为什么这是真的?a[5] == 5[a]
int x = 1["WTF?"];
等于
int x = "WTF?"[1];
84是“T”ASCII码
The reason why this works is that when the built-in operator []
is applied to a pointer and an int, a[b]
is equivalent to *(a+b)
. Which (addition being commutative) is equivalent to *(b+a)
, which, by definition of []
, is equivalent to b[a]
.