SW/C++

C++ : lvalue, rvalue, move, 이동생성자 : 개념, 장점, 필요성

얇은생각 2020. 4. 25. 07:30
반응형

C++ : lvalue, rvalue, move, 이동생성자 : 개념, 장점, 필요성

 

lvalue

단일 식을 넘어 지속되는 개체를 의미합니다. 주소가 있으며, 이름이 있는 변수입니다. 

const 변수, 배열 변수, 비트 필드, 공용 구조체, 클래스 멤버, 좌측 값 참조로 반환하는 함수 호출, 문자열 리터럴 등을 의미합니다. 대부분 지금까지 익숙한 것들을 lvalue라고 생각하면 됩니다.

 

 

 

rvalue

lvalue가 아닌 개체라고도 할 수 있습니다. 사용되는 단일 식을 넘어 지속되지 않는 일시적인 값을 의미합니다. 

주소가 없는 개체, 리터럴(문자열 리터럴 제외), 참조로 반환하지 않는 함수 호출, i++, i-- 등 기본으로 지원되는 산술식, 논리식, 비교식 등이 있습니다. 추가적으로 람다, 열거형들이 그 예라 할 수 있습니다.

 

 

 

C++에서 어떻게 복사를 막을 수 있을까요?

rvalue 참조와 이동 문법으로 해결할 수 있습니다. rvalue 참조 (&&)는 C++ 이후에 새로 나온 연산자입니다. 기능상 & 연산자와 비슷합니다. & 연산자는 lvalue 참조에 사용합니다. && 연산자는 rvalue 참조에 사용합니다.

 

 

 

std::move()

rvalue 참조를 반환합니다. lvalue를 rvalue로 변환합니다.

 

 

 

이동 생성자

<class_name>::<class_name>(<class_name>&&)

다른 개체 멤버 변수들의 소유권을 가져옵니다. 복사 생성자와 달리, 메모리 재할당을 하지 않습니다. 복사 생성자보다 빠르며, 약간 얕은 복사와 비슷합니다. 

반응형