2013-01-17 5 views
5

Mögliche Duplizieren:
In C arrays why is this true? a[5] == 5[a]ganze Zahl mit einem String in C++ indiziert

Wie ist es möglich, dass diese gültig ist C++?

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

auf VC++ 10 diese kompiliert und im Debug-Modus der Wert von x 84 nach der Anweisung.

Was ist los?

+5

Dies muss ein Duplikat von ein paar Dutzend Fragen sein ... – dasblinkenlight

+0

siehe [hier] (http://stackoverflow.com/a/1995156/238902) – Default

+0

Eine bessere Frage ist für einige benutzerdefinierte Typen, die überladen der 'operator [] (int)' würde das funktionieren: '5 [myType()]' – paul23

Antwort

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

gleich zu

int x = "WTF?"[1]; 

84 ist "T" ASCII-Code

9

Array Index-Operator kommutativ ist. Es ist äquivalent zu int x = "WTF?"[1]; Hier "WTF?" ist ein Array von 5 char s (es Nullabschluss enthält) und [1] gibt uns das zweite Zeichen, die 'T' ist - implizit int konvertiert es Wert 84.

Offtopic gibt: Der Code Snippet ist ungültig C++, eigentlich - main muss int zurückgeben.

Sie können hier mehr in die Tiefe gehende Diskussion lesen: In C arrays why is this true? a[5] == 5[a]

+3

+1 für das * main muss zurückgeben int * :) – Default

+0

ok es ist gültig Microsoft C++ in dem es kompiliert :) – ehremo

1

Der Grund, warum das funktioniert, das heißt, wenn der Bediener-eingebauten [] auf einen Zeiger und ein int angewendet wird, ist a[b]-*(a+b) gleichwertig. Welches (zusätzlich zukommutativ) ist äquivalent zu *(b+a), was nach Definition von [] äquivalent zu b[a] ist.

Verwandte Themen