Domanda

In C ++, operatore pre-incremento dà Ivalue perché oggetto incrementato stessa viene restituito, non una copia. Ma in C, dà rvalue. Perché?

È stato utile?

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:

indefiniti comportamento e sequenza punti ricaricate

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?

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top