[Cpp] L-Value, R-Value

Tay (Taewan) Ham·2023년 10월 27일
0

cpp

목록 보기
2/2

L-Value는 Left Value, R-Value는 Right Value의 약자이다. 일반적으로, =을 기준으로 좌우라고 생각할 수도 있지만, 그리고 C언어에서는 실제로 그렇지만, C++에서는 전혀 그렇지 않다.

C++에서 정의되는 L-Value, R-Value는 다음과 같다.

  • L-Value
    구체적인 메모리 주소를 가리키는 값을 의미한다. Variable, Array element가 l-value에 해당한다. 표현식 이후에도 계속 살아있다.

  • R-Value
    구체적인 메모리 주소를 가지고 있지 않다. 상수 등이 r-value에 해당된다. 표현식 이후에는 없어진다.

아래와 같은 코드가 있다고 했을 때,

int a = 3;

a는 l-value이고, 3은 r-value이다.

l-value는 r-value가 될 수 있다. 하지만, r-value는 l-value가 될 수 없다. 아래의 예를 보자.

int a = 3;
int* b = &a;  // b : l-value

int x = 1;  // x : l-value
int y = 2;  // y : l-value
int z = x + y;  // x+y : r-value, z : l-value

++z;  // l-value
z++;  // r-value;

다음과 같은 경우에는 error가 발생한다.

int a;
3 = a;  // error

int* b = &3; // error

Move semantics나 R-Value reference와 같은 심화 개념은 추후 다룰 예정이다.

Reference

0개의 댓글