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?
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?
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:
- A variable (§4.12) (in C, this [expression] would be called an lvalue)
- A value (§4.2, §4.3)
- Nothing (the expression is said to be void)
Leggi altre domande sui tag c terminology