Perché operatore di pre-incremento dà rvalue in C?
Domanda
In C ++, operatore pre-incremento dà Ivalue perché oggetto incrementato stessa viene restituito, non una copia. Ma in C, dà rvalue. Perché?
Soluzione
C non ha riferimenti. In C ++ ++i
restituisce un riferimento i
(lvalue) mentre in C restituisce una copia (incrementato).
C99 6.5.3.1/2
Il valore dell'operando della pre fi x ++ operatore viene incrementato. Il risultato è il nuovo valore dell'operando dopo Incremento . L'espressione ++ Eis equivalente a (E + = 1).
‘‘value of an expression’’ <=> rvalue
Tuttavia, per ragioni storiche penso "riferimenti non essendo parte di C" potrebbe essere un possibile motivo.
Altri suggerimenti
C99 dice nella nota (sezione $ 6.3.2.1),
Il nome ‘‘lvalue’’ è originaria Dall'espressione assegnazione E1 = E2, in cui l'operando a sinistra è E1 richiesto per essere un (grado modi fi) lvalue. E 'forse meglio considerato come che rappresenta un oggetto ‘‘locator valore''. Ciò che è talvolta chiamato ‘‘Rvalue’’ 'in questo Internazionale Standard descritto come il valore ‘’ di l'espressione’’ .
La speranza che spiega perché ++i
in C, ritorna rvalue.
Per quanto riguarda C ++, direi che dipende dall'oggetto viene incrementato. Se il tipo di oggetto è un certo tipo definito dall'utente, allora può sempre ritorno Ivalue. Ciò significa che, si può sempre i++++++++
scrittura o ++++++i
se il tipo di i
è Index
come definiti qui:
Al largo della parte superiore della mia testa, non posso immaginare alcuna dichiarazione utili che potrebbero derivare da utilizzando una variabile pre-incrementato come valore assegnabile. In C ++, a causa dell'esistenza di overloading degli operatori, che posso. Avete un esempio specifico di qualcosa che si sta impedito di fare in C, a causa di questa restrizione?