2013-10-30 2 views
1
//move the element 
void StrVec::push_back(string &&s) 
{ 
    chk_n_alloc(); 
    alloc.constructor(first_free++,std::move(s)); 
} 

alloc은 할당 자의 개체입니다. chk_n_alloc()에 신경 쓰지 마십시오. 난 그냥 은 이미 rvalue 알고 싶어, 왜 표준을 호출해야합니까 :: 이동 생성자에 전달합니까? 코드는 C++ 입문서 5th p545입니다.std :: move를 호출하여 생성자에 s를 전달해야하는 이유는 무엇입니까?

+0

rvalue에는 이름이 없습니다. 's'의 이름은 "s"입니다. –

답변

2

이것은 까다로운 상황인데, 우좌 참조로 s이 전달되었지만 이름을 지정하면 값이 왼쪽으로 이동해야하므로 알 수 있듯이 rvalue 참조로 캐스트됩니다. . 이것은 인수가 rvalue reference로 취해 져야한다는 것을 의미합니다. 왜냐하면 비 임시 인수가 전달되지 않도록하기 때문입니다 (이동하지 않는 한)

+0

변수's'는 (반드시) 주소를 가지고 있지 않습니다. 그러나's'라는 표현은 좌변가입니다. 하나의 표현식의 유형과 하나의 표현식의 가치 범주는 두 개의 직각 개념이라는 것을 지적해야한다. – MWid

관련 문제