[C++] lvalue, rvalue

자세한 내용은 여기 참고하면 좋을 거 같다.

https://blog.seulgi.kim/2017/06/cpp11-value-category

 

lvalue 란?

  • 단일 식을 넘어 지속되는 개체
  • 주소가 있음
  • 이름이 있는 변수
  • const 변수
  • 배열 변수
  • 비트 필드
  • 공용 구조체
  • 클래스 멤버
  • 좌측 값 참조&로 반환하는 함수 호출
  • 문자열 리터럴

rvalue 란?

  • lvalue 가 아닌 개체
  • 사용되는 단일 식을 넘어 지속되지 않는 일시적인 값
  • 주소가 없는 개체
  • 리터럴 (문자열 리터럴 제외)
  • 참조로 반환하지 않는 함수 호출
  • i++, i--
  • 기본으로 지원되는 산술식, 논리식, 비교식
  • 열거형 (enum)
  • 람다(lambda)

예시)

    int number = 10;                        // number는 lvalue

    int* pNumber = &number          // pNumber는 lvalue

    const int NUMBER_MAX = 20;  // NUMBER_MAX는 lvalue

    const char* name = "dracula"    // name, "dracula"는 lvalue

 

    int number = 10;                         // 10은 rvalue

    10 = number;                              // 10은 rvalue이기 때문에 error 

    (number + 5) = 10;                     // (number + 5)는 rvalue이기 때문에 error

    int number2 = 20;

    int sum = number + number2;  // number + number2는 rvalue

    

    if(number < number2)                // number < number2 는 rvalue

    

    int zero = 0;                             

    int& reference = zero;                // reference lvalue 참조

    int& reference2 = 0;                 // 0은 rvalue, reference2 는 lvalue 참조기 때문에 error

 

    에러 메세지

    invalid initialization of non-const reference of type int& from an rvalue of type ‘int’

 

 

그리드형(광고전용)

이 글을 공유합시다

facebook twitter googleplus kakaoTalk kakaostory naver band

댓글

Designed by JB FACTORY