LVALUE,RVALUE

보통 Left Value, Right Value 로 풀어서 씁니다. 
그래서 보통 Left Value = Right Value 와 같이
=(대입연산자)를 기준으로 왼쪽 값 Left Value , 오른쪽 값 Right Value 라고 이해할 수 있습니다.
하지만 Lvalue는 = 를 기준으로 왼쪽, 오른쪽 양쪽다 위치할 수 있고, Rvalue는 = 를 기준 오른쪽에만 위치할 수 있습니다.
C++에서는 Lvalue,Rvalue의 L,R을 위치가 아닌 그저 Lvalue,Rvalue 고유명사로 봐주시면 되겠습니다.

Lvalue는 반드시 명시적인 메모리 공간을 가져야 합니다.
값을 대입 받기 때문입니다.
Rvalue는 잠깐? 사용하고 사라지는 임시값입니다.
Lvalue에 값을 전해줄 수만 있으면 됩니다.

코드

#include "pch.h"
#include <iostream>

int main()
{
	int LValue_int = 10;
	return 0;
}

Lvalue = LValue_int
Rvalue = 10
오류가 나지 않는 코드입니다.

#include "pch.h"
#include <iostream>

int main()
{
	int LValue_int = 10;
	20 = LValue_int;
	return 0;
}

Lvalue = LValue_int
Rvalue = 20
Rvalue가 =(대입연산자) 왼쪽에 위치하기에 오류가 나는 코드입니다.

#include "pch.h"
#include <iostream>

int main()
{
	int Temp = 10;
	++Temp = 20;
	Temp++ = 20;
	return 0;
}

그럼 여기서에서 int Temp 는 Lvalue입니다.
그럼 ++Temp, Temp++는 Lvalue일까요 Rvalue일까요

++Temp는 증가된 자신을 return 하기 때문에 Lvalue 입니다.
Temp++는 증가된 복사본을 return 하기 때문이 Rvalue 입니다.
그래서 위 사진과 같이 ++Temp 에는 = 20 이라는 상수를 받을수 있지만.
Temp++은 Rvalue이기 때문에 20이라는 상수를 받을수가 없습니다.

Lvalue와 Rvalue 의 구분이 모호할때는 &연산자를 사용하시면 됩니다. &연산자는 주소연산자 이기 때문에 Lvalue를 요구합니다.

Lvalue 주소를 참조하는 & 연산자가 있다면 Ravlue주소를 참조하는 연산자도 있지않을까

Rvalue Reference 우측값 참조

있다 우측값 참조 &&연산자가 Rvalue를 참조할 수 있는 연산자이다.

+ Recent posts