C++의 모든 표현식(expression)은 두 가지 중요한 속성을 가지고 있다.
- Type(자료형) : 표현식이 나타내는 데이터의 유형
- Value Category(값 범주) : 표현식이 메모리에서 데이터를 어떻게 다루어야 하는지에 대한 특성
C++11 이전에는 lvalue와 rvalue라는 두 가지 Value Category만 존재했으나, C++11 부터 메모리 관리와 이동 시맨틱을 보다 다양하게 지원하기 위해 이를 더 세분화했다. 이러한 변화는 C++에서 메모리 관리와 성능 최적화를 가능하게 하는 중요한 개념을 제공하며, 특히 이동 시맨틱을 통한 효율적인 자원 관리를 지원한다.
Value Category의 종류
1. Prime Category (기본 값 카테고리)
모든 표현식은 Prime Category 중 하나인 prvalue, xvalue, lvalue에 반드시 속한다.
- lvalue :
- prvalue :
- xvalue :
2. Mixed Category (혼합 값 카테고리)
Prime Category를 조합한 상위 범주로, 특정 맥락에서 표현식의 성질을 더 명확히 나타내기 위해
Mixed Category인 glvalue와 rvalue를 사용할 수 있다.
- glvalue :
- rvalue :
Value Category의 구분 방법
표현식이 속한 Value Category는 다음과 같은 두 질문으로 구분할 수 있다.
- 메모리에서 고유한 위치를 가리킬 수 있는가?
: 변수나 함수처럼 식별자를 통해 메모리에서 특정 위치를 참조할 수 있는지를 의미한다. - 이동 가능한가?
: 값이 이동 시맨틱을 통해 자원의 소유권을 다른 객체로 넘길 수 있는지를 의미한다.
| 이동 시킬 수 있다. | 이동 시킬 수 없다. | |
| 고유한 위치를 가리킬 수 있다. | xvalue | lvalue |
| 고유한 위치를 가리킬 수 없다. | prvalue | X |
* 고유한 위치를 가리킬 수 없으며, 이동도 시킬 수 없는 값은 아무런 의미를 갖지 않기 때문에 명칭이 없다.

추가적으로로 고유한 위치를 가리키는 모든 식들은 'glvalue', 이동 시킬 수 있는 모든 식들을 'rvalue'라고 한다.
-참고자료
https://en.cppreference.com/w/cpp/language/value_category
'C++' 카테고리의 다른 글
| [C/C++] 함수의 인수 전달 방식 (0) | 2024.10.30 |
|---|