una - valores de retorno en programacion
¿Son las cadenas literales y los valores de retorno de la función lvalues o rvalues? (3)
Solo me pregunto si una cadena literal es un lvalue o un valor r. ¿Hay otros literales (como int, float, char, etc.) lvalue o rvalue?
¿El valor de retorno de una función es lvalue o rvalue?
¿Cómo se nota la diferencia?
- los literales de cadena son lvalues, pero no puede cambiarlos
- rvalue, pero si es un puntero y no NULL, el objeto al que apunta es un lvalue
El estándar C reconoce los términos originales representados por izquierda y derecha como en L = R
; sin embargo, dice pensar en lvalue como el valor del localizador , lo que significa que puede obtener la dirección de un objeto y, por lo tanto, ese objeto tiene una ubicación. (Ver 6.3.2.1 en C99 )
Por la misma razón, el estándar ha abandonado el término rvalue, y solo usa "el valor de una expresión", que es prácticamente todo, incluidos literales como ints, chars, floats, etc. Además, cualquier cosa que se pueda hacer con un valor r también se puede hacer con un lvalue, por lo que puede pensar en todos los valores l como valores r.
Hay dos tipos de expresiones en C: 1. lvalue: una expresión que es un lvalue puede aparecer como el lado izquierdo o derecho de una asignación. 2. rvalue: una expresión que es un valor r puede aparecer en el lado derecho pero no en el lado izquierdo de una asignación. Las variables son lvalues y, por lo tanto, pueden aparecer en el lado izquierdo de una tarea. Los literales numéricos son valores r, por lo que no se pueden asignar y no pueden aparecer en el lado izquierdo. La siguiente es una declaración válida: int g = 20; Pero seguir no es una declaración válida y generaría un error en tiempo de compilación: 10 = 20;
hay una definition para C ++ de Microsoft. Según esta definición, una cadena literal, por ejemplo "hola mundo", es lvalue, porque es const y no temporal. En realidad, persiste a lo largo de la vida de su aplicación.