std::move
- 인수를 무조건 rvalue 로 캐스팅한다.
- 컴파일러에게 그 객체가 이동에 적합하다는 것을 알려주는 캐스팅을 수행할 뿐 이동을 수행하지 않는다.
class annotation
{
public:
explicit annotation(cons std::string text)
: value(std::move(text)) // text 를 value로 '이동'한다.
{ // 이 코드는 보기와는 다르게 작동한다.
}
};
- text 가 value로 이동하는 것이 아니라 복사된다.
- std::move 때문에 text 가 rvalue로 캐스팅되는 것은 확실하다.
- text는 lvalue const std::string 에서 rvalue const std::string 으로 캐스팅된다. const 가 유지된다.
- 이동 생성자는 const 가 아닌 std::string 의 rvalue 참조를 받는다.
- rvalue 는 복사생성자에 전달될 수 있다.
- 이동은 객체를 수정하는 행위이니 const 객체가 이동이 안되는 것은 당연하다.
- 이동을 지원하려면 const 로 선언하면 안되며, std::move는 단지 rvalue 로 형변환 할뿐이다.
댓글남기기