integer indexed with a string in c++ 
Possible Duplicate:
  In C arrays why is this true? a[5] == 5[a]
号
这是怎么可能的,这是有效的C++?
| 12
 3
 4
 
 | void main(){
 int x = 1["WTF?"];
 }
 | 
在VC++10上,它编译,并且在调试模式下,x的值在语句之后是84。
发生什么事?
		
		
- 这一定是几十个问题的副本…
- 看看这里
- 一个更好的问题是,对于某些用户定义的类型,如果这些类型重载了operator [](int),这是否有效:5[myType()]
- 抱歉,重复的问题,不知道要搜索什么
- @paul23内部的定标器被编译器简化了。所以不是直接的。然而。。。永不言败。看看这个无用的代码,它有一个int*的cast操作符。它完全符合你的想法。好时光。
- @哇,太棒了,呵呵。
- 我有时会用索引变量来说明这一点,仅仅是为了看到对等程序员所面临的双重挑战。你知道,一个复杂的for循环,埋在其中:i++[arName]等等。让他们保持警觉=P
 
	 
数组下标运算符是可交换的。它相当于int x ="WTF?"[1];,这里"WTF?"是一个5个char的数组(它包括空终止符),[1]给我们第二个char,它是'T'隐式转换成int的值84。
异常:代码片段不是有效的C++,实际上-EDCOX1 6必须返回EDCOX1×5。
您可以在这里阅读更深入的讨论:在C数组中,为什么是这样的?A[5]==5[A]
		
		
- +1对于main必须返回int:)
- 好的,它是有效的微软C++,因为它编译:
 
	 
等于
号
84是"T"ASCII码
 
这样做的原因是,当内置操作符[]应用于指针和int时,a[b]相当于*(a+b)。它(加法是交换的)等价于*(b+a),根据[]的定义,它等价于b[a]。