用c ++中的字符串索引的整数

integer indexed with a string in c++

本问题已经有最佳答案,请猛点这里访问。

Possible Duplicate:
In C arrays why is this true? a[5] == 5[a]

这是怎么可能的,这是有效的C++?

1
2
3
4
void main()
{
  int x = 1["WTF?"];
}

在VC++10上,它编译,并且在调试模式下,x的值在语句之后是84。

发生什么事?


数组下标运算符是可交换的。它相当于int x ="WTF?"[1];,这里"WTF?"是一个5个char的数组(它包括空终止符),[1]给我们第二个char,它是'T'隐式转换成int的值84。

异常:代码片段不是有效的C++,实际上-EDCOX1 6必须返回EDCOX1×5。

您可以在这里阅读更深入的讨论:在C数组中,为什么是这样的?A[5]==5[A]


1
int x = 1["WTF?"];

等于

1
int x ="WTF?"[1];

84是"T"ASCII码


这样做的原因是,当内置操作符[]应用于指针和int时,a[b]相当于*(a+b)。它(加法是交换的)等价于*(b+a),根据[]的定义,它等价于b[a]