본문 바로가기
Language/C++문법

Value

by y.j 2021. 10. 4.
728x90

INTRO

C++에서 auto, decltype등을 자세히 이해하기 위해서는 value에 대해서 정확히 이해하고 넘어갈 필요가 있다. 다른 언어들은 메모리 관리를 대부분 가비지컬렉터에서 해주지만, 시스템 외에 개발자가 직접 관리 할 수 있다. 장점인지 단점인지는 잘 모르겠다. 하지만, 이 메모리 여부에 따라 Value의 범주가 구분된다.

Copy & Move

Value에 대해서 설명하기 전에 Copy와 Move에 대해서 알고 지나가야된다. 아래 그림을 참고 하자.

Value의 유형

  • glvalue : 계산에서 개체, 비트 필드 또는 함수의 ID를 결정하는 식입니다.
  • prvalue : 계산에서 개체 또는 비트 필드를 초기화하거나 연산자가 나타나는 컨텍스트에서 지정한 대로 연산자의 연산자 값을 계산하는 식입니다.
  • xvalue : 리소스를 다시 사용할 수 있는 개체 또는 비트 필드를 나타내는 glvalue입니다. ex) a[n]
  • lvalue : xvalue가 아닌 glvalue입니다.
  • rvalue : prvalue 또는 xvalue입니다.

여기에서 말하는 i는 indentity의 여부 m은 move의 여부이다.

대문자는 되지 않는다는 의미하고, 소문자는 가능하다를 의미한다.

위의 말들은 다소 알아듣기 어렵다. 아래에 예제를 보면서 확인해보자.

 

lvalue

아래에 있는 예제는 배열을 제외한 구조체 및 클래스 변수들도 포함된다.

int e[100];

int main() {
    int j = 0; // j는 identity를 가지지만 move할 수 없다
    e[0]  = 100; 
}

prvalue

int e[100];

int main() {
    int j = 0; // 0은 prvalue
    e[0]  = 100; 
}

xvalue

아래에 있는 예제는 배열을 제외한 구조체 및 클래스 변수들도 포함된다.

int e[100];

int main() {
    int a = e[100]; // e[100]은 identity도 가지지만 move된다.
}

[참고문헌]

https://aerocode.net/207
[https://docs.microsoft.com/ko-kr/cpp/cpp/lvalues-and-rvalues-visual-cpp?view=msvc-160&viewFallbackFrom=vs-2019]

728x90

'Language > C++문법' 카테고리의 다른 글

C++의 람다 식  (0) 2021.09.22

댓글