- 2022.06.07 숙제2022년 06월 08일
- 디지털 블리자드
- 작성자
- 2022.06.08.:46
Lvalue, Rvalue, 이동생성자, Rvalue Reference을 정리하세요.
Lvalue, Rvalue 란?
Lvalue는
메모리에 할당되어 주소값을 가지는 객체들을 의미합니다.
또한 호출할 수 있는 이름이 있습니다.
단일 표현 식 이후에도 없어지지 않고 존재가 지속되는 객체를 의미합니다.
Rvalue는
0 1 2 3 4 5 'A' 등등 메모리 주소 값을 가질 수 없는 값들을 의미합니다.
표현식이 종료된 이후에 더이상 존재하지 않는 일시적인 값들을 가리킵니다.이동생성자란?
대표적으로 std::move, std::forward 가 있습니다.
std::move는 Lvalue를 Rvalue로 형변환시킵니다.
std::move는 무조건 Lvalue를 Rvalue로 캐스팅합니다.
하지만 std::forward는 조건부 캐스팅합니다.그림 1에서string b객체에 a를 대입하여 값을 복사한 경우에 해당합니다.
string c 객체에 std::move(a)를 사용하므로써 a 값을 Rvalue로 형변환시킨 후 c객체에 넘깁니다.
그래서 a에 저장된 값의 소유권을 c가 가져가게 됩니다. a는 값의 소유권을 잃게됩니다.따라서 결과를 출력 해보면 a의 값은 없고 b와 c만 값을 가지게 됩니다.
RValue Reference란?
Rvalue Reference는 Rvalue를 참조하는 객체입니다.
RValue Reference의 연산자는 &&를 사용합니다.
RValue Reference는 불필요한 복사를 제거하여 성능 향상에 도움을 주는 새로운 개념입니다.위의 그림과 같이 b객체가 retrun 되는 함수의 값을 복사하는것이 아닌 그 메모리 공간을 그대로 참조하는 연산자입니다.
&& 연산자는 rvalue 값을 참고하기 때문에 lvalue인 strin&& c = a; 처럼 lvalue를 참조하여 사용할 수 없습니다.결과는 아래와 같습니다.
참고자료
https://psychoria.tistory.com/54
https://moris0712.tistory.com/26
https://create-new-worlds.tistory.com/138
https://www.youtube.com/watch?v=GutCygNRi-I'과제(숙제)' 카테고리의 다른 글
2022.06.21 과제 (0) 2022.06.22 2022.06.10 숙제 (0) 2022.06.12 2022.06.08 숙제 (0) 2022.06.09 2022.06.03 숙제 (0) 2022.06.04 2022.06.02 숙제 (0) 2022.06.02 다음글이전글이전 글이 없습니다.댓글
스킨 업데이트 안내
현재 이용하고 계신 스킨의 버전보다 더 높은 최신 버전이 감지 되었습니다. 최신버전 스킨 파일을 다운로드 받을 수 있는 페이지로 이동하시겠습니까?
("아니오" 를 선택할 시 30일 동안 최신 버전이 감지되어도 모달 창이 표시되지 않습니다.)