value category

move와 forward 구분

이동 시맨틱은 자원을 훔치는 코드가 아니라, 곧 사라질 값의 소유권을 이전해도 된다는 약속입니다.

01

lvalue

이름이 있고 다시 사용할 수 있는 값입니다. 그냥 전달하면 복사 후보가 됩니다.

named value
02

std::move

실제로 옮기지 않고 이동 가능한 대상으로 캐스팅합니다. 이후 원본은 재초기화 관점으로 봅니다.

cast to xvalue
03

move ctor

자원 포인터를 넘기고 원본을 nullptr 등 안전한 빈 상태로 둡니다.

steal resource
04

noexcept

컨테이너 재배치에서 복사 대신 이동을 선택하게 하는 중요한 약속입니다.

container friendly

move·forward 역할: std::move는 무조건 rvalue로 보이게 하는 캐스팅이고, std::forward는 템플릿 wrapper에서 원래 값 범주를 보존하는 조건부 캐스팅입니다.