recently in the study of C + + Lvalue right value, handling, collecting some other people's information for their own records and learning, if later saw a better explanation, will continue to add. (hit "? "Is the place I don't understand)
reference: "Boost Library quest--depth analysis C + + quasi-standard library (2nd edition)" 9787302342731
lvalue: A variable that can be used to store data, with the actual memory address (variable name);
rvalue (non-lvalue): the "temporary" variable of "anonymous", which terminates at the end of an expression, cannot hold data, can be modified, or is not modified (const-decorated).
discriminant lvalue Right value:
The Lvalue can take the address operator & get the address, the right value does not, a compilation error occurs.
The result of all C + + expressions does not know that the lvalue is the right value(? )
++i is an lvalue, i++ rvalue (returns a temporary variable that cannot be assigned);(? )You can transfer right-worthy content to other objects, which completely eliminates the expensive copy cost of the previous, and t& Lvalue refers to the;t&& rvalue reference (C++11). C + + Primer 3rd only use the post operator (i++) when necessary, the predecessor operator returns an Lvalue (the object itself), and the latter operator returns an rvalue. The predecessor operator requires less work, only adds 1 to return the result after adding 1, and the latter operator must first save the original value in order to return the values that are not added to 1 o'clock, which can take a greater price. So suggest
++i。 MSDNLvalues and Rvalues
Visual Studioversion
Each C + + expression is either an lvalue or a right-hand value. An Lvalue is an object that is persisted outside a single expression . you can treat an lvalue as an object with a name. all variables, including (const) variables that cannot be changed, arelvalue values. An lvalue is a temporary value that is not reserved outside the expression that uses it. to better understand the difference between left and right values, consider the following example:
lvalues_and_rvalues1.cpp//compile with:/ehsc#include <iostream>using namespace Std;int main () { int x = 3 + 4; cout << x << Endl;}
In this example,x is an lvalue because it is reserved outside the expression that defines it. The expression 3 + 4 is a right value because it evaluates to a temporary value that is not reserved outside the expression that defines it .
The following example shows several correct and incorrect uses of the left and right values:
Lvalues_and_rvalues2.cppint Main () { int i, J, *p; Correct usage:the variable I was an lvalue. i = 7; Incorrect usage:the left operand must is an lvalue (C2106). 7 = i; C2106 J * 4 = 7;//C2106 //Correct usage:the dereferenced pointer is an lvalue. *p = i; const int CI = 7; Incorrect usage:the variable is a non-modifiable lvalue (C3892). CI = 9; C3892 //Correct usage:the conditional operator returns an lvalue. ((I < 3)? i:j) = 7;}
Description |
The examples in this topic illustrate the correct and incorrect use of operators when they are not overloaded. you can make an expression (such as J * 4) an lvalue by overloading the operator. |
When referencing an object reference, the term "lvalue" and "rvalue" are often used. For more information about references, see Lvalue reference declarator:& and rule reference declarator:&&.
pasted from: >
C + + Lvalue right-value