이 코드가 작동하지 않는 이유를 모르겠습니다. 이 _는 0xcccccccc로 표시되고 v는 더 이상 4가 아닙니다. 왜?msvc2010에서 lvalue로 이동/중단되지 않습니까?
참고 : lvalue/move 의미를 사용하려고합니다.
struct AA{
void*this_;
int v;
AA() {v=4;this_=this; }
AA(AA&a){this_=this; }
AA(AA&&a){
this_=a.this_;
v = a.v;
}
};
void movetest(AA s) {}
void movetest(AA& s) {}
//void movetest(AA&& s) {}
AA&& movetest() { return AA(); }
void MyTestCode2(){
AA c = movetest();
printf("wron value. 4 !='%d'\n", c.v);
}
그 솔루션을, AA의 &&가 호출되지 않습니다. 필자는'a = a.v + 1'을 작성하여 테스트하여 로그에 5를 인쇄해야합니다.하지만 어쨌든 어떻게 함수에서 lvalue를 사용합니까? –
std :: move로 이동 구성을 강제로 보여주는 내 대답을 편집했습니다. – BCoates
AA && 캐스트 또는 표준 : : 이동 (캐스팅하지만 참조 제거 후)을 사용해야합니다. return AA()는 최적화 된 것 같습니다 (이것은 디버그 모드입니다). 그것은 복사 생성자를 호출하지 않습니다. 만약 내가 금주 모임을 쓸 것이다; a. 그래서 ... 나는 (왜 적어도 Visual C++로) AA && isnt 에러/경고가 무엇인지 이해할 수 없다. +1 및 accepeted –