c++ - una - ¿Qué es un valor?
significado de constantes en programacion (4)
Posible duplicado:
¿Qué son rvalues, lvalues, xvalues, glvalues y prvalues?
El Estándar de C ++, principalmente en el Capítulo 5, titulado Expresiones, define qué expresiones son valores de l y cuáles son valores de r. He leído ese capítulo y creo que puedo distinguir correctamente entre valores y valores.
Sin embargo, antes de leer buenos libros en C ++ y / o el estándar, solía pensar que un valor es algo que puede estar en el lado izquierdo de una tarea, y un valor es algo que no puede. Obviamente, hay numerosos contraejemplos de esta ingenua definición. Algún tiempo después, pensé que un valor es algo que tiene una dirección, y un valor es algo que no tiene. Esto también parece tener contraejemplos en forma de, digamos, algunos objetos temporales que, obviamente, tienen una dirección.
Un amigo mío me preguntó qué es un valor y qué es un valor. Le dije aproximadamente lo que es, exigió una respuesta más completa. Le dije que fuera a leer el estandarte. Se negó a molestar a sus cerebros y dijo que estaba seguro de que debe haber alguna condición necesaria y suficiente para que algo sea un valor.
¿Esta ahí?
Por ejemplo, un lvalue es algo a lo que se puede enlazar una referencia no constante. Pero este no es realmente satisfactorio. Estoy buscando algo más obvio, algo que sea fácil de explicar, sin tener que considerar cada tipo de expresión ...
Espero que la pregunta sea clara.
Es posible que solo esté un poco confundido entre valores modificables y no valores. rvalues puede ser lvalues o no-lvalues. el término lvalue modificable se usa después de la introducción del modificador const (vea la entrada de wikipedia en los valores ) en C ++ cada expresión devuelve un lvalue, rvalue o ningún valor. Cuando un lvalue aparece como un rvalue es convertido implícitamente a un valor de r (vea IBM sobre tipos de valor )
He encontrado que considerar los valores como "cosas con nombres" es la simplificación más útil. La expresión ++x
es un valor l, con el nombre siendo x
. Por el contrario, rvalue
son "cosas sin nombres". x++
es un valor r, porque produce un valor sin nombre.
Simplemente, un valor es cuando la expresión no sobrevivirá más allá del final de dicha expresión. Un lvalue lo hará. Este principio básico es lo que permite mover semánticas y referencias de valores: que puede modificarlas sin problema, porque sabe que la vida del objeto ha terminado.
Un valor l es algo que se refiere a una ubicación de memoria. Esto es lo más simple que podría decir. Un valor r puede ser un valor l Un valor r es solo el resultado de una expresión o una constante