[C++] l-value,r-value
2021. 2. 14. 19:08ㆍStudy/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 |