Tuesday 25 October 2011

What is an rvalue?

In the previous post, an lvalue was defined as an expression to which a value can be assigned. It was also explained that an lvalue appears on the left side of an assignment statement. Therefore, an rvalue can be defined as an expression that can be assigned to an lvalue. The rvalue appears on the right side of an assignment statement.
Unlike an lvalue, an rvalue can be a constant or an expression, as shown here:

int x, y;

x = 1;                   /* 1 is an rvalue; x is an lvalue */

y = (x + 1);         /* (x + 1) is an rvalue; y is an lvalue */

As stated in previous post, an assignment statement must have both an lvalue and an rvalue. Therefore, the following statement would not compile because it is missing an rvalue:

int x;
x = void_function_call()         /* the function void_function_call()
returns nothing */

If the function had returned an integer, it would be considered an rvalue because it evaluates into something that the lvalue, x, can store.

2 comments: