2021년 1월 12일 화요일

C++에서 Lvalue와 Rvalue

표준 C언어의 관점에서 Lvalue와 Rvalue는 Left Value와 Right Value를 의미한다.

대입 연산자(=)를 기준으로 왼쪽에만 쓸 수 있는 값(variable)을 Lvalue라 하고, 오른쪽에만 쓸 수 있는 값(보통 상수) Rvalue라 한다.


하지만 C++ 표준에서는 Left/Right를 의미하지 않고, Lvalue/Rvalue를 그 자체로 보는 것이 맞다.


C++에서 Lvalue와 Rvalue의 의미는 다음과 같다.

  • Lvalue
    단일 표현식 이후에도 없어지지 않고 지속되는 객체
  • Rvalue
    표현식이 종료된 이후에는 더 이상 존재하지 않는 임시적인 값

  • 예시
    int x = 3;
    const int y = x;
    int z = x + y;
    int *p = &x;
    cout << string("one");
    ++x; // 증가된 x 자신을 리턴
    x++; // 증가된 복사본을 리턴


Lvalue 참조자 &와 Rvalue 참조자 &&
  • Lvalue 참조자 &
    Lvalue만 참조할 수 있음
  • Rvalue 참조자 &
    Rvalue만 참조할 수 있음

  • 예시
    int x = 10;
    int& a = x;
    //int& b = 10; => error: cannot bind non-const lvalue reference of type 'int&' to an rvalue of type 'int'
    int&& c = 5;
    //int&& d = a; => error: cannot bind rvalue reference of type 'int&&' to lvalue of type 'ini'


 

 

 
 
 

댓글 없음:

스프린트 정리

스프린트 :  스프린트는 프로토타입을 제작하고 고객과 함께 아이디어를 테스트하여 중요한 문제들에 대한 답을 찾는 독특한 5일 짜리 과정이다. 스트린트는 업무 전략, 혁신 행동과학, 디자인 그 외 여러 분야의 최고 히트작을 어떤 팀에서라도 사용할 수 있...