2016-02-24 5 views
5

Ich habe in diesen Tagen Arrays studiert. Ich habe über eine Deklaration eines Arrays und Initialisierung von seinem Element auf diese Weise kommen:C++: int x [+30] ist eine gültige Deklaration?

int x[+30]; 
x[+1]=0; 

Dies ist mir ein wenig verwirrend. Ich habe das Konzept im Kopf, dass, wenn wir schreiben:

x[n]=0; 

Dann heißt es:

*(x+n)=0; 

Dann x[+1] schreiben würde bedeuten, *(x++1) und dies scheint ungültig. Bitte korrigieren Sie mich für den Fehler, den ich beim Verständnis dieses Konzepts mache.

+1

Hinweis, '* (x ++ 1)' ungültig, weil '++' ist ein Inkrementoperator, Ausdruck als '* ((x ++) 1) gedeutet ' –

+0

@ utkarsh867: Was ist die explizite Verwendung von Array-Kapazität zu verwenden sei + ve? –

+2

Beachten Sie, dass '* (x + + 1)' ** ** gültig ist. Die wichtige Regel hier ist, dass die Umwandlung auf der Stufe ** tokens ** und nicht auf der Ebene ** character ** arbeitet. – MSalters

Antwort

10

x[n] bedeutet *((x)+(n)) (beachten Sie die Blackets) und x[+1] bedeutet *((x)+(+1)). Dies ist gültig.

N3337 5.2.1 Subskribierung

Der Ausdruck E1 [E2] identisch ist (per Definition) bis * ((E1) + (E2))

+5

Nice blackets! –

+2

Sehr feine Blackets. Ich habe fast die gleichen bekommen. – erip

+1

Phalentheses und Blaces sind auch gut. –

7

Das + Plus-Symbol handeln kann als unärer Operator. Es hat normalerweise keinen Effekt, aber die Konsequenz ist, dass es entfernt wird, bevor die Nummer aufgelöst wird. Zum Beispiel:

int x[+30]; 

Ist zu

int x[operator+(30)]; 

umgewandelt, das dann

int x[30]; 

So

x[+1] = 0; 

würde einfach lösen, wie

012, dieser Ausdruck wird
x[1] = 0; 

Es würde nicht als * (x ++ 1) auflösen, zumal das in C++ keine gültige Syntax ist.

+1

Ich glaube nicht, dass unary plus für ein 'int'-Argument in' operator + 'umgewandelt wird, es ist ein eingebauter Operator. – TartanLlama

+0

@TartanLlama Für alle Absichten und Zwecke wird es so behandelt. Sie können Ausdrücke wie "int n = 8 + +9;" schreiben, und der Compiler akzeptiert sie und analysiert sie als "8 + 9". – Xirema

+1

Aber es hat nichts mit 'operator +' zu tun, was nur berücksichtigt wird, wenn das Argument eine Klasse oder ein Aufzählungstyp ist.Der Operator '+' ist nicht dasselbe wie 'Operator + '. – TartanLlama

Verwandte Themen