[C++] l-value,r-value

2021. 2. 14. 19:08Study/C&C++

C++에서 코드를 작성 할때. 변수를 선언하고 값을 넣고, 리턴값을 받아오는 일을 자연스럽게 하게된다.

value ,값의 위치,특성에 따라 l-value,r-value(좌측값 우측값) 으로 나뉘는데 

이번에는 각각 value들이 어떤 의미인지 알아 보겠다.


l-value

메모리를 할당받고 Scope 안에서 항상 접근, 수정 가능한 것. 

ex) 변수들, 객체의 instance

 

r-value

임시적으로 잠간의 expression,표현 후 바로 사라지는 값.

ex) 상수, 1,2 .. , 단순 자료형 return 값.

int func()
{
	int a= 1;
	reutnr a;
 }
 
 void main()
 {
 	int x = 1;
    int y = func();
    // r-value의 주소는 참조 할수 없다
    int *p = &1; //error
    int *p = &func(); //error
}

위 코드에서 보면.

main() 함수 scope 안에서 우리는 언제든지 x,y의 값을 수정할 수 있다, 또한 그 주소들도 알아 낼 수 있다.

func() 함수 scope 안에서 역시 변수 a의 값을 그 안에서 언제든지 수정 할 수있다.

이렇게 scope 안에서 메모리를 할당 받은 후 항상 접근, 수정이 가능한 것을 l-value 라고 한다.

하지만

1, func() 의 return 값의 주소를 받을 수 있을까? 에러가 날 것이다.

이유는 이와 같은 r-value 들은 그 순간 임시적으로 생성됬다가 l-value 로 들어가거나, 단순 연산후 사라지는 값이기 때문이다.

 

C++ 11 부터는 이러한 r-value 의 참조 를 지원 한다.

다음 포스팅에선 r-value reference를 도입하면서 해결된 문제에 대해 알아 보겠다.

'Study > C&C++' 카테고리의 다른 글

[C++] std::cin, getline()  (0) 2021.02.22
[C++]R-value Reference,move Sementics  (0) 2021.02.20
[C++] C -style string , std::string  (0) 2021.02.11
[C++] Stack and Heap(feat. Memory Leak)  (0) 2021.02.11
[C++] Pointer vs Reference  (0) 2021.02.11