2016-02-24 16 views
5

Ho studiato matrici in questi giorni. Mi sono imbattuto in una dichiarazione di un array e l'inizializzazione del suo elemento in questo modo:C++: int x [+30] è una dichiarazione valida?

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

Questo mi confonde un po '. Ho il concetto in mente che quando scriviamo:

x[n]=0; 

allora vuol dire:

*(x+n)=0; 

Poi la scrittura x[+1] significherebbe *(x++1) e questo sembra valido. Per favore correggimi per l'errore che sto facendo nella comprensione di questo concetto.

+1

note, '* (x ++ 1)' non valido perché '++' è un operatore di incremento, espressione analizzata come '* ((x ++) 1)' –

+0

@ utkarsh867: che cosa è l'uso di specificare la capacità di matrice esplicitamente a essere + ve? –

+2

Nota che '* (x + + 1)' ** è ** valido. La regola importante qui è che la trasformazione funziona al livello ** token **, non al livello ** character **. – MSalters

risposta

10

x[n] significa *((x)+(n)) (notare le blackets) e x[+1] significa *((x)+(+1)). Questo è valido

N3337 5.2.1 subscripting

L'espressione E1 [E2] è identica (per definizione) a * ((E1) + (E2))

+5

Nice blackets! –

+2

Benne molto fini. Ho quasi avuto gli stessi. – erip

+1

Anche palenthes e blaces sono buoni. –

7

Il simbolo + Plus può agire come unario operatore. Di solito non ha alcun effetto, ma la conseguenza è che viene rimosso prima che il numero venga risolto. Per esempio:

int x[+30]; 

viene convertito in

int x[operator+(30)]; 

che poi diventa

int x[30]; 

Così, questa espressione

x[+1] = 0; 

sarebbero semplicemente risolvere come

x[1] = 0; 

Non si risolve come * (x ++ 1), soprattutto perché non è una sintassi valida in C++.

+1

Non penso che unario plus sia convertito in 'operator +' per un argomento 'int', è un operatore integrato. – TartanLlama

+0

@TartanLlama A tutti gli effetti, è trattato come tale. Puoi scrivere espressioni come 'int n = 8 + +9;' e il compilatore lo accetterà e lo analizzerà come '8 + 9'. – Xirema

+1

Ma non ha nulla a che fare con 'operator +', che viene considerato solo se l'argomento è un tipo di classe o di enumerazione.L'operatore '+' non è la stessa cosa di 'operator +'. – TartanLlama