R-Value L-Value
rvalue와 lvalue는 C++11에서부터 개념이 중요해지게 되었다. Rvalue와 Lvalue는 다음과 같이 정의할 수 있다.
Lvalue
Lvalue는 객체를 참조하는 표현식이며 메모리를 보유한다.
Ravlue
Rvalue는 Lvalue가 아닌 표현식이다. 즉 식별 가능한 메모리 영역을 보유하는 객체를 반드시 나타내는것이 아니며 임시적이다.
Features
- 숫자나 문자와 같은 리터럴은 Rvalue이다.
- Enum 또한 Rvalue이다.
- 이항 연산자(+)의 결과는 항상 Rvalue이다.
- 단항 연산자(&)는 Lvalue를 필요로 한다. 하지만 결과값은 Rvalue다.
- 포인터는 결과로 Lvalue를 만들어 준다. 예를들어 Non-null pointer는 항상 유효한 객체를 가리킨다.
- 전위 연산 표현식의 결과는 Lvalue이다.
- 참조는 단순히 이름이기 때문에 Rvalue에 묶인 참조 자체는 Lvalue이다.
- Rvalue는 임시적이고 메모리 영역을 가리킬 필요가 없지만 어떤 경우에는 메모리를 가르켜야할 상황이 온다. 이런 상황은 권장하지 않는다.
- 후위 연산 표현식의 결과는 Rvalue이다.
- 함수 호출은 결과 유형이 참조인 경우 Lvalue를 리턴한다.
1 | // returning reference to make the function call an Lvalue |