C++/기타

[C++] LValue vs RValue (1)

sseram 2023. 4. 29. 22:36
반응형

맨 첨에 C를 어정쩡하게 배운 후에 C++ 사용하다 보니 애매하게 이해가 되기도 했고..

지금도 어느 정도 쓰고 있긴 하지만 아직까지 제대로 감이 잡히지 않아, 공부하며 정리할 겸 남겨본다.

 

 

 

 

 

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

 

 

해당 사이트에서 소개하는 value들 간의 diagram.

 

우리는 편하게 lvalue / rvalue라고 소개하고 있지만, 위에서 말하기엔 lvalue가 좀 더 밑의 개념이고,

rvalue가 좀 더 상위 개념이다.

다만 lvalue / rvalue 해도 대충 다 알아먹으니, 원래는 다른 분류다 정도만 알아두고 있으면 될 것같다.

 

 

 


 

 

int a = 22;

 

위와 같은 코드가 있다.

우리야 대충 그렇구나~ 하고 사용하지만, 컴파일러는 얘를 어떻게 이용하고, 저장하고 있을까?

 

 

이런... 못생긴메모리가 있다.

 

 

 

int a = 22; 라고 정의를 해 뒀으니, 이제 a라는 공간을 만들 것이고, a라는 공간에 22라는 값을 넣을 것이다.

다만 메모리에는 'a' 라는 공간을 만들 수 없으니 메모리가 사용하는 물리적 주소인 0x10에다가 값을 넣을 것이다.

그리고 해당 위치를 'a' 라고 부를 것이다.

 

 

마치.. '서울특별시 서초구 신반포로 270'를 반포자이 아파트라고 부르는 것처럼.

 

 

그리고 거기에 22를 입주시킬 것이다.

 

 

 

이런 식으로.

 

0x10이라는 메모리 위치는 'a' 라고 불리고 있고,

a = 22; 라고 선언을 해 주었으니 그 위치에 22 값을 넣었다.

 

 

 

여기서 잠시 , lvalue와 rvalue가

'왼 쪽에 오는 값', '오른 쪽에 오는 값' 이라는 것을 상기하고 넘어가자.

 

 


 

 

이제, 우리는 lvalue와 rvalue에다가 15라는 값을 넣어 볼 것이다.

 

 

 

먼저 lvalue.

 

 

위와 같은 시퀀스를 거쳐서 lvalue에 15를 대입할 수 있다.

우리는 a라는 것을 메모리의 '0x10' 위치로 지정하였으니, [그 곳에 가서 값을 변경하라] 라고 알아먹는 것이다.

 

 

 

그럼 rvalue에 대입하려고 하면?

뇌정지가 온다. 22는 15가 아닌데?

 

 


 

 

그런데, 위의 그림을 다시 한 번만 잘 살펴보자.

이 메모리 그림.

왼쪽은 0x10이라고 16진수로 나타냈지만, 저것도 10진수로 나타내면 결국

 

 

 

이렇게 되고,

 

a = 22 가

16 = 22

 

이런 식으로 바꿀 수 있다.

 


 

다만, 위처럼 그대로 생각하면 안된다.

 

 

 

 

위 식에서 '=' 라는 기호를 기준으로

 

왼 쪽에는 메모리 주소

오른 쪽에는 숫자 값.

 

이렇게 들어간다고 생각해야 한다.

 

 

 

애초에 lvalue (p)rvalue 설명도

 

 

lvalue에는 프로그램에서 액세스할 수 있는 주소가 있습니다. lvalue 식의 예로는 변수, 배열 요소, lvalue 참조, 비트 필드, 공용 구조체 및 클래스 멤버를 반환하는 함수 호출을 비롯한 const 변수 이름이 있습니다.
prvalue 식에는 프로그램에서 액세스할 수 있는 주소가 없습니다. prvalue 식의 예로는 리터럴, 비참조 형식을 반환하는 함수 호출 및 식 평가 중에 생성되지만 컴파일러에서만 액세스할 수 있는 임시 개체가 있습니다.

 

 

라고 나와있다.

 

 

 

주소로 사용 = 값으로 사용.

lvalue = rvalue

 

 

이런 식으로 인식하면 간단하게 잡고 넘어갈 수 있을 것이다.

 

 

결국 컴파일러가 알고, 컴퓨터 내부에서 사용 할 수 있는 값은 숫자밖에 없다.

다만 그 숫자를 어떤 식으로 (주소? 값) 활용하냐에 따라 달라지는 것 뿐.

 

 

 

 

xvalue는 다음 시간에...

 

 

 

->

2023.05.10 - [C++/기타] - [C++] LValue vs RValue (2)

 

[C++] LValue vs RValue (2)

2023.04.29 - [C++/기타] - [C++] lValue vs rValue (1) [C++] LValue vs RValue (1) 맨 첨에 C를 어정쩡하게 배운 후에 C++ 사용하다 보니 애매하게 이해가 되기도 했고.. 지금도 어느 정도 쓰고 있긴 하지만 아직까지

donot-simsim.tistory.com

 

 

 

 

 

*잘못된 정보는 알려주시면 감사한 마음으로 수정하겠습니다.

반응형