address-of operator (&one important operator is the address-of operator this operator returns the memory location where an object resides and is useful for implementing an alias test that is discussed in section lvaluesrvaluesand references in addition to pointer typesc+defines reference types one of the major changes in ++ is the creation of new reference typeknown as an rvalue reference in order to discuss rvalue referencesand the more standard lvalue referencewe need to discuss the concept of lvalues and rvalues note that the precise rules are complexand we provide general description rather than focusing on the corner cases that are important in language specification and for compiler writers an lvalue is an expression that identifies non-temporary object an rvalue is an expression that identifies temporary object or is value (such as literal constantnot associated with any object as examplesconsider the followingvector arr )const int int yint ystring str "foo"vector *ptr &arrwith these declarationsarrstrarr[ ]&xyzptr*ptr(*ptr)[xare all lvalues additionallyx is also an lvaluealthough it is not modifiable lvalue as general ruleif you have name for variableit is an lvalueregardless of whether it is modifiable for the above declarations "foo" +ystr substr( , are all rvalues and "fooare rvalues because they are literals intuitivelyx+ is an rvalue because its value is temporaryit is certainly not or ybut it is stored somewhere prior to being assigned to similar logic applies for str substr( , notice the consequence that there are some cases in which the result of function call or operator call can be an lvalue (since *ptr and arr[xgenerate lvaluesas does cin>> >> and others where it can be an rvaluehencethe language syntax allows function call or operator overload to specify this in the return typeand this aspect is discussed in section intuitivelyif the function call computes an expression whose value does not exist prior to the call and does not exist once the call is finished unless it is copied somewhereit is likely to be an rvalue reference type allows us to define new name for an existing value in classic ++ reference can generally only be name for an lvaluesince having reference to temporary would lead to the ability to access an object that has theoretically been declared as no longer neededand thus may have had its resources reclaimed for another object howeverin ++ we can have two types of referenceslvalue references and rvalue references