최대 1 분 소요

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 로 형변환 할뿐이다.

태그: , ,

카테고리:

업데이트:

댓글남기기