상세 컨텐츠

본문 제목

C++ Lvalue와 Rvalue

C++/개념공부

by J2on 2024. 2. 7. 17:25

본문

 

제가 이해한 것으로 작성하는 글이라 틀린부분이 있을 수 있습니다. 
혹시 잘못된 부분이 있다면 알려주세요.

 

 

lvalue와 rvalue를 이해하기 전에 먼저 glvalue와 prvalue, xvalue에 대해 알아야 한다. 

 

 

glvalue (Generalized Lvalue)

  • glvalue는 평가에서 개체, 비트 필드 또는 함수의 ID를 결정하는 식입니다.

라는 microsoft의 설명

 

쉽게 말해 glvalue는 메모리 주소를 나타내는 표현식이다. 

 

그리고 glvalue에는 lvaluexvalue가 속한다.

 

 

prvalue (Pure Rvalue)

prvalue는 연산자의 피연산산자 값을 계산하는 식, 주로 함수 호출 반환 값 or 상수

a = 3 <- 3은 prvalue

 

우리가 일반적으로 사용하는 rvalue값이다. 

 

 

자 다시 lvalue와 rvalue로 돌아가서

 

우리가 코드를 작성할 때, 

 

왼쪽(lvalue)에는 값을 저장할 변수명을, 오른쪽(rvalue)에는 값이나 혹은 메모리 주소를 넣는다. 

 

lvalue에 주소가 할당되지 않은 상수 같은 값을 넣을 수 있는가?

3 = &a;

 

적어도 나는 이런 코드를 본적이 없다. 

 

결국

lvalue -> 주소

rvalue -> 값 & 주소

 

이렇게 저장할 수 있다는 것이다. 

 

앞서 주소는 glvalue, 수의 결과나 상수는 prvalue(순수 rvalue)라는 것을 알았다.

 

따라서 

lvalue -> 주소  (glvaue 중 lvalue)

rvalue -> 값 & 주소   (prvalue와 glvalue 중 xvalue)

 

이렇게 사용할 수 있다. 

 

 

 

다시 처음에 나온 그림을 보면 왜 이렇게 동작하는지 알 수 있을 것이다. 

 

 

 

출처

 

https://learn.microsoft.com/ko-kr/cpp/cpp/lvalues-and-rvalues-visual-cpp?view=msvc-170

 

값 범주: Lvalues 및 Rvalues(C++)

자세한 정보: Lvalues 및 Rvalues(C++)

learn.microsoft.com

 

관련글 더보기

댓글 영역