개발자 면접 공부/C-C++

(C,C++) L-Value, R-Value

chogyujin 2022. 8. 2. 21:37
728x90

오늘은 L-Value, R-Value에 대해 공부하겠습니다.


L-Value

https://docs.microsoft.com/ko-kr/cpp/c-language/l-value-and-r-value-expressions?view=msvc-170

 

L-Value 및 R-Value 식

자세한 정보: L-Value 및 R-Value 식

docs.microsoft.com

마이크로소프트의 공식 문서를 보면 L-Value는 메모리 위치를 참조하는 식을 의미한다고 합니다.
왜 L이 되었는가 하면 메모리 주소를 참조한다는 뜻에서 Location의 앞글자, 또는 주로 코드에서 = 을 기준으로
왼쪽에 위치한다고 해서 Left Value라 해 L Value가 되었다는것 같습니다.

그리고 주로 L Value가 변수, 함수, 클래스 등을 나타내는 식별자를 의미 합니다.


R-Value

"모든 L Value는 R Value지만 R Value는 L Value가 아닐수 있다."

마이크로소프트 공식 문서를 보면서 제일 먼저 눈에 들어오는 문장입니다.

int v = 1;
v = 1 + v;

 

위 C++ 코드에서 첫줄의 v는 L Value이며 R Value는 상수인 20입니다. 정확히는 v가 가르키는 메모리 주소에 20이 들어가는 형식입니다.

그리고 2번쨰 v는 = 왼쪽에 있는 v 는 여전히 L Value 이지만 20 + v 는 그 자체가 (20 + v)이라는 임시 값 이기 때문에 R Value입니다.

 

int a = foo();

 위에 코드는 foo()가 R Value입니다. 이러므로 R Value는 어떤 상태인지 예상을 해볼수 있는데 R Value는 해당 표현식이 끝나면 더이상 참조할 수 없는 값을 의미합니다.


& , &&?????

기존 &(Reference)를 사용하면 L Value의 참조자를 만들 수 있습니다.

int v = 2;
int& ref = v;

이런 식으로 L Value에 대해 참조자를 만들 수 있습니다. 이것은 참조자를 사용하는 방법으로 전에 포인터 레퍼른스 차이를 통해 다아는 방법이였습니다. 하지만 C++11 표준에서 &&가 추가되여 R Value에 대해서도 참조자를 만들 수 있게 됩니다.

 

int foo()
{
	return 5;
}

int main()
{
	
	int&& c = foo();

	cout << c;
	return 0;
}

이런 식으로 하면 R Value에 대해서 참조자를 만들 수 있게 됩니다.

'개발자 면접 공부 > C-C++' 카테고리의 다른 글

Struct vs Class  (0) 2022.08.03
(C++) 이동생성자(Move Constructor)  (0) 2022.08.02
C++ 스마트 포인터(Unique, Shared, Weak)  (0) 2022.07.19
C++ 캐스팅의 종류  (0) 2022.07.14
C++ RTTI 에 대해  (0) 2022.07.14