난 정말 최고야 멋있어
move,forward 그리고 Rvalue Reference 본문
int lvalue = 3;
int& lref = lvalue;
int&& rref = 2; //rvalue
int&& rref2 = lvalue + lvalue; //xvalue
int&& rref3 = std::move(lref); //rvalue
// int&& rref4 = lref; lref 는 lvalue
// int&& rref5 = rref; rref 역시 rvalue
move : 불필요한 복사 연산을 하지 않기 위해 도입. 비용 절감은 덤! ( ex. 복사 후 원본 객체 삭제 )
forward : 템플릿 프로그래밍에서 value 타입에 따라 함수를 여러번 정의해야하는 불상사를 막기 위해 생김
rvalue refernece : move와 forward로 부터 값을 받기 위해 생김 (xvalue 와 rvalue를 인자로 받을수 있다)
**Rvalue Reference는 단순히 형식일뿐.. Rvalue Reference 변수는 lvalue다
**move는 단순히 rvalue로 캐스팅하는 역할
**forward는 템플릿 인자T 에 따라서 캐스팅!
즉 lvalue가 들어왔다면 lvalue로 캐스팅, rvalue가 들어왔다면 rvalue로 캐스팅