제가 이해한 것으로 작성하는 글이라 틀린부분이 있을 수 있습니다.
혹시 잘못된 부분이 있다면 알려주세요.
lvalue와 rvalue를 이해하기 전에 먼저 glvalue와 prvalue, xvalue에 대해 알아야 한다.
glvalue (Generalized Lvalue)
라는 microsoft의 설명
쉽게 말해 glvalue는 메모리 주소를 나타내는 표현식이다.
그리고 glvalue에는 lvalue와 xvalue가 속한다.
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
Deque(및 Queue, stack)의 메모리 관점에서 구현 방식 (0) | 2024.02.07 |
---|---|
C++ Smart Pointer에 대하여 (0) | 2024.02.07 |
C++ 삼항연산자 ( a > b ? 1 : 2 ) (0) | 2024.02.07 |
Constant Expression : constexpr 키워드에 대하여 (하드코딩, 메모리 관리) (0) | 2023.08.23 |
댓글 영역