728x90
반응형
질문 : rvalues, lvalues, xvalues, glvalues 및 prvalues는 무엇입니까?
C ++ 03에서 표현식은 rvalue 또는 lvalue 입니다.
C ++ 11에서 표현식은 다음과 같을 수 있습니다.
- rvalue
- lvalue
- xvalue
- glvalue
- 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
반응형
'프로그래밍 언어 > C++' 카테고리의 다른 글
std :: vector에 대한 반복 : unsigned 변수와 signed 변수 (0) | 2021.11.17 |
---|---|
[C#] 폴더가없는 경우 새로 만드는 방법 (0) | 2021.11.15 |
[C++] private, public 및 protected 상속의 차이점 (0) | 2021.11.04 |
IEnumerable <T> return vs IQueryable<T> return (0) | 2021.10.25 |
대소 문자를 구분하지 않는 'Contains (string)' (0) | 2021.10.25 |