반응형
lvalue
단일 식을 넘어 지속되는 개체를 의미합니다. 주소가 있으며, 이름이 있는 변수입니다.
const 변수, 배열 변수, 비트 필드, 공용 구조체, 클래스 멤버, 좌측 값 참조로 반환하는 함수 호출, 문자열 리터럴 등을 의미합니다. 대부분 지금까지 익숙한 것들을 lvalue라고 생각하면 됩니다.
rvalue
lvalue가 아닌 개체라고도 할 수 있습니다. 사용되는 단일 식을 넘어 지속되지 않는 일시적인 값을 의미합니다.
주소가 없는 개체, 리터럴(문자열 리터럴 제외), 참조로 반환하지 않는 함수 호출, i++, i-- 등 기본으로 지원되는 산술식, 논리식, 비교식 등이 있습니다. 추가적으로 람다, 열거형들이 그 예라 할 수 있습니다.
C++에서 어떻게 복사를 막을 수 있을까요?
rvalue 참조와 이동 문법으로 해결할 수 있습니다. rvalue 참조 (&&)는 C++ 이후에 새로 나온 연산자입니다. 기능상 & 연산자와 비슷합니다. & 연산자는 lvalue 참조에 사용합니다. && 연산자는 rvalue 참조에 사용합니다.
std::move()
rvalue 참조를 반환합니다. lvalue를 rvalue로 변환합니다.
이동 생성자
<class_name>::<class_name>(<class_name>&&)
다른 개체 멤버 변수들의 소유권을 가져옵니다. 복사 생성자와 달리, 메모리 재할당을 하지 않습니다. 복사 생성자보다 빠르며, 약간 얕은 복사와 비슷합니다.
반응형
'SW > C++' 카테고리의 다른 글
C++ : constexpr : 개념, 예제, 사용법, 필요성, 장점 (0) | 2020.04.27 |
---|---|
C++ : 이동대입연산자 : 개념, 예제, 활용방법 (0) | 2020.04.26 |
C++ : 템플릿 : 특수화, 장점과 단점, 베스트 프랙티스 (0) | 2020.04.24 |
C++ : 템플릿 함수 : Math 예제 구현해보기 (0) | 2020.04.23 |
C++ : 템플릿 활용 : 고정형 사이즈 벡터 만드는 예제 (0) | 2020.04.22 |