프로그래밍 언어/C++

rvalues, lvalues, xvalues, glvalues, prvalues 사용 방법

Rateye 2021. 11. 11. 10:41
728x90
반응형
질문 : rvalues, lvalues, xvalues, glvalues 및 prvalues는 무엇입니까?

C ++ 03에서 표현식은 rvalue 또는 lvalue 입니다.

C ++ 11에서 표현식은 다음과 같을 수 있습니다.

  1. rvalue
  2. lvalue
  3. xvalue
  4. glvalue
  5. prvalue

2 개의 카테고리가 5 개의 카테고리가되었습니다.

  • 이 새로운 범주의 표현은 무엇입니까?
  • 이러한 새 범주는 기존 rvalue 및 lvalue 범주와 어떤 관련이 있습니까?
  • C ++ 0x의 rvalue 및 lvalue 범주가 C ++ 03의 경우와 동일합니까?
  • 이러한 새로운 카테고리가 필요한 이유는 무엇입니까? WG21 신들은 우리를 단순히 인간을 혼동시키려는 것일까 요?
답변

이 문서는 짧은 소개가 아닐 것 같습니다. n3055

전체 학살은 이동 의미론으로 시작되었습니다. 이동할 수 있고 복사 할 수없는 표현이 생기면 갑자기 파악하기 쉬운 규칙에 따라 이동할 수있는 표현과 방향을 구분해야했습니다.

초안을 기반으로 추측 한 바에 따르면 r / l 값 구분은 동일하게 유지되며 움직이는 상황에서만 지저분해진다.

필요합니까? 우리가 새로운 기능을 포기하고 싶다면 아마 아닐 것입니다. 그러나 더 나은 최적화를 위해 우리는 아마도 그것들을 수용해야합니다.

n3055 인용 :

  • lvalue (역사적으로는 lvalue가 할당 표현식의 왼쪽에 나타날 수 있기 때문에 소위)는 함수 또는 객체를 지정합니다. [실시 예는 다음의 경우 E 다음, 포인터 타입의 표현이다 *E 로 개체 또는 기능을 언급 좌변 표현식 E 점. 또 다른 예로, 반환 유형이 lvalue 참조 인 함수를 호출 한 결과는 lvalue입니다.]
  • xvalue ( "eXpiring"값)는 일반적으로 수명이 거의 끝나가는 객체를 나타냅니다 (예를 들어 리소스를 이동할 수 있음). xvalue는 rvalue 참조와 관련된 특정 종류의 표현식의 결과입니다. [예 : 반환 유형이 rvalue 참조 인 함수를 호출 한 결과는 xvalue입니다.]
  • glvalue ( "일반화 된"lvalue)는 lvalue 또는 xvalue 입니다.
  • rvalue (역사적으로 rvalue가 할당 표현식의 오른쪽에 나타날 수 있기 때문에 소위)는 xvalue, 임시 객체 또는 하위 객체 또는 객체와 연관되지 않은 값입니다.
  • prvalue ( "순수"rvalue)는 xvalue가 아닌 rvalue입니다. [예 : 반환형이 참조가 아닌 함수를 호출 한 결과는 prvalue입니다.]

문제의 문서는 새로운 명명법 도입의 결과로 발생한 표준의 정확한 변경을 보여주기 때문에이 질문에 대한 훌륭한 참고 자료입니다.

출처 : https://stackoverflow.com/questions/3601602/what-are-rvalues-lvalues-xvalues-glvalues-and-prvalues
728x90
반응형