티스토리 뷰


cin

character input


cout

character output


L-Value 와 R-Value

일반적으로 대입 연산자(=)의 피연산자 중 왼쪽에 위치하면 l-value, 오른쪽에 위치하면 r-value라고 한다.

l-value메모리상에서 지속적인 주소(위치)를 가진 값이다. 즉, 표현식(expression) 이후에도 없어지지 않고 지속된다. 변수들은 주소를 가지고 있으므로 모두 l-value다.

할당(assignment)을 수행할 때, 대입 연산자의 왼쪽 편은 l-value이어야 한다.

5 = 6;

위와 같은 코드는 5가 l-value가 아니므로 컴파일 오류가 발생한다.

값 5에는 위치를 가진 메모리가 없으므로 아무것도 할당할 수 없다. 5는 5를 의미하며, 값은 다시 할당할 수 없다.

l-value의 반대는 r-value다. r-value는 지속적인 메모리 주소와 관련이 없는 값이다. 예를 들면 숫자(5)와 표현식(x + 2)과 같다. 5는 5로 평가되고, x + 2는 변수 x의 값 + 2로 평가된다.

r-value는 표현식이 종료된 이후에는 더 이상 존재하지 않는 임시적인 값이다.

int y; // y를 정수 변수로 정의한다.
y = 4; // 4(r-value)는 4로 평가되어지고, y(l-value)에 할당된다.
y = 2 + 5; // 2(r-value) + 5(r-value)는 7(r-value)로 평가되어지고, y(l-value)에 할당된다.

int x; // x를 정수 변수로 정의한다.
x = y; // y(l-value)는 7로 평가되어지고, x(l-value)에 할당된다.
x = x; // x(l-value)는 7로 평가되어지고, x(l-value)에 할당된다.
x = x + 1; // x(l-value) + 1(r-value)는 8(r-value)로 평가되어지고, x(l-value)에 할당된다.

댓글