Quali sono i termini chiave rvalue e lvalue?

5

Molte volte il mio compilatore mostra errori come Lvalue o Rvalue Required.

Quali sono i Lvalues e Rvalues in C o altri linguaggi di programmazione ?

Un puntatore è costante a rvalore?

    
posta Krishna Chandra Tiwari 05.07.2012 - 06:15
fonte

1 risposta

7

I termini sono in qualche modo specifici della lingua; sono stati introdotti per la prima volta in CPL . Essere un lvalue o un rvalue è una proprietà di un'espressione ; cioè, ogni espressione è o un lvalue o un valore.

Troverai spesso spiegazioni che riguardano il lato sinistro e destro di un compito. Questa è l'origine storica delle lettere l e r in lvalue e rvalue , ma non regge più. Ad esempio, ci sono lvalues che possono non stare sul lato sinistro di un compito (vengono in mente espressioni che indicano matrici e variabili costanti, ma anche tipi di classi in cui l'operatore di assegnazione è stato nascosto o cancellato), e almeno in C ++, ci sono rvalues che possono stare sul lato sinistro di un compito.

La migliore definizione che conosco è: un lvalue è un'espressione a cui può essere applicato l'operatore unario & , mentre un valore di rvalue è un'espressione a cui l'operatore unario & può non essere applicato. (Questo non è completamente vero in C ++ se sovraccarichi l'operatore, ma probabilmente è una pratica molto brutta.)

Da C ++ 11, la lingua ha anche le nozioni di xvalues , prvales und glvalues (vedi qui e qui ).

Is pointer constant is a rvalue?

Le espressioni che denotano le variabili del puntatore come p sono lvalue. Le espressioni che denotano i valori del puntatore come &i sono rvalori. Entrambi possono essere const o non-const ; è completamente ortogonale.

Java non ha la nozione di lvalue, ma in §15.1 gli stati della specifica della lingua:

When an expression in a program is evaluated (executed), the result denotes one of three things:

  1. A variable (§4.12) (in C, this [expression] would be called an lvalue)
  2. A value (§4.2, §4.3)
  3. Nothing (the expression is said to be void)
    
risposta data 05.07.2012 - 09:11
fonte

Leggi altre domande sui tag