Why don’t rvalues have a memory address? Are they not loaded into the RAM when the program executes or does it refer to the values stored in processor registers?
Share
Sign Up to our social questions and Answers Engine to ask questions, answer people’s questions, and connect with other people.
Login to our social questions & Answers Engine to ask questions answer people’s questions & connect with other people.
Lost your password? Please enter your email address. You will receive a link and will create a new password via email.
Please briefly explain why you feel this question should be reported.
Please briefly explain why you feel this answer should be reported.
Please briefly explain why you feel this user should be reported.
Your question (“Why don’t rvalues have a memory address?”) is a bit confused. An rvalue is a kind of expression. Expressions don’t have addresses: objects have addresses. It would be more correct to ask “why can one not apply the address-of operator to an rvalue expression?”
The answer to that is rather simple: you can only take the address of an object and not all rvalue expressions refer to objects (for example, the expression
42has a value but does not refer to an object).Some rvalue expressions do refer to objects, but such objects lack persistence. An object referred to by an rvalue expression is a temporary object and is destroyed at the end of the expression in which it is created. Such objects do indeed have addresses (you can easily discover this by calling a member function on a temporary object; the
thispointer must point to the temporary object and thus the temporary object must have an address).This is the fundamental difference between lvalue expressions and rvalue expressions. Lvalue expressions refer to objects that have persistence: the object to which an lvalue expression refers persists beyond a single expression.