lvalue, rvalue 알아보자

2019, Apr 29    

Lvalue, Rvalue 는 무엇?

  • Lvalue, Rvalue 는 expression 에서 정의된다. object 와 관계 없다.
    • double d; // d 는 double object이고 l,r value 의미없다.
    • d = 3.1415*2; // expression 에서 lvalue, rvalue 가 정의된다.
  • Lvalue 는 표현식에서 object(메모리를 가지고 있음)임.
  • Rvalue 는 표현식에서 Lvalue 를 제외한 표현식임.

Lvalue, Rvalue 예들…

  • Numeric, character literal 은 Rvalue.
  • enum Value 들 Rvalue.
    • enum Color {red, green, blue} // red, green, blue 는 Rvalue
  • & 참조연산은 Lvalue 만 사용가능, 연산결과는 Rvalue
    • int n, *p; p = &n;
  • 포인트* 연산은 결과로 Lvalue 반환.
  • pre-increment (++nCount) 결과로 Lvalue 반환.
  • 리턴 type 이 reference 인 경우 함수 콜은 Lvalue 이다.
  • 참조는 그냥 이름. 따라서 Rvalue 에 묶인 참조 그 자체는 Lvalue 이다.
  • Rvalue 는 임시적이고, 해당 메모리에 접근하는 것이 권장되지는 않지만 접근은 가능하다.
  • post-increment (nCount++) 결과로 Rvalue 반환.

## 정리하자면..

  • 표현식이 끝나도 존재하는 것은 Lvalue.
  • 표현식이 끝나면 사라지는 임식적인 값은 Rvalue.

참조 https://www.codeproject.com/Articles/313469/The-Notion-of-Lvalues-and-Rvalues