-
L value & R value - 둘 간의 차이점쾌락없는 책임 (공부)/짜잘쓰 2021. 12. 20. 22:38반응형
서론
언제 한번 연합 동아리 활동에서 넥슨 프로그래머의 세미나를 들었는데 클라이언트 프로그래머를 위한 질문으로 자주 등판한다는 질문들을 알려주셨다. 이 중에서 R value, L value의 차이점을 알아야 한다는 이야기가 있었는데 이번에 시간이 난 기념 자세히 알아보기 위해서 이렇게 정리를 해 봅니다.
L value
MS의 공식 문서가 가장 신뢰가 깊지 않을까. 여기서 L value는 메모리 위치를 참조하는 식을 의미한다고 합니다. 왜 L이 되었는가 하면 메모리 주소를 참조한다는 뜻에서 Location의 앞글자, 또는 주로 코드에서 = 을 기준으로 왼쪽에 위치한다고 해서 Left value라 해 L value가 되었다는것 같습니다.
그리고 주로 L value가 변수, 함수, 클래스 등을 나타내는 식별자를 의미한다고 합니다.
R value
"모든 L value는 R value지만 R value는 L value가 아닐 수 있다"
MS 공식 문서를 보면서 제일 먼저 눈에 들어오는 문장입니다.
int val = 20; val = 777 + val;
위 C++ 코드에서 첫줄의 val은 L value이며 R value인 상수값 20을 나타내게 되었습니다. 정확히는 val 이 가리키는 메모리 주소에 20이 들어가게 된 것이죠.
그리고 2번째 val의 경우 = 왼쪽에 있는 val은 여전히 L value이지만 777 + val은 그 자체로 (777 + val)이라는 '임시 값'이 되어 R value가 되는 것입니다.
cout << function() << '\n';
위 코드에서는 function()이 R value가 됩니다. 이쯤되면 어느정도 예상을 해볼 수 있는데 R value는 해당 표현식이 끝나면 더이상 참조할 수 없는 값을 의미하게 됩니다.
&, && ?
기존 & 를 사용하면 L value의 참조자를 만들 수 있었습니다.
int val1 = 20; int& ref = val;
이런 식으로 L value에 대해 참조자를 만들 수 있는게 다 아는 사실이었습니다. 그런데 C++ 11 표준에서는 &&이 추가되어서 R value에 대해서도 참조자를 만들 수 있게 됩니다.
int function(){ return int; } int&& ref = function();
이런 식으로 하면 R value에 대해서 참조자를 만들 수 있게 됩니다. 사용처에 대해서는 다음에 정리되는대로 적어두도록 하겠습니다.
참고 사이트
- && 과 관련한 이야기
반응형'쾌락없는 책임 (공부) > 짜잘쓰' 카테고리의 다른 글
[Etc] 퍼포스 디프 툴 WinMerge 로 변경하기 (1) 2024.11.16 [etc.] 유니코드를 통한 한글 자모 분리 알고리즘 (1) 2023.01.10