이 rvalue 호출이 모호한 이유는 무엇입니까? 나는 AA와 AA를 가질 수 & 그리고 컴파일러는 AA&
을 사용하는 것을 알게 될 것이다. 하지만 세 번째 옵션을 추가 할 때 오류가 발생합니다. 분명히 AA & &은 더 나은 과부하이며, int의 int와 같은 다른 것은 더 길다. 왜 이것이 모호한가요? 3 가지 과부하를 모두 지킬 수있는 방법이 있습니까? (타입 캐스팅 (AA&&)
하지 않습니다).이 rvalue 호출이 모호한 이유는 무엇입니까?
struct AA{
void*this_;
AA() { this_=this; }
//not valid, use AA&, AA(AA a){ this_=this; }
AA(AA&a){ this_=this; }
AA(AA&&a){ this_=a.this_; }
};
void movetest(AA s) {}
void movetest(AA& s) {}
//This gets me the ambiguous error void movetest(AA&& s) {}
AA&& movetest() { return AA(); }
void MyTestCode2(){
AA a;
AA b(a);
AA c = movetest();
movetest(AA());
}
(보조 노트에, 당신의 제로 인수에 대응'movetest' 함수는 지역 변수에 대한 참조를 반환합니다.) – GManNickG
(나는 또한거야 정상적으로 당신은 3 가지 과부하 모두를 원하지 않는다고 말하십시오.) – GManNickG
@GMan : 왜 ... 왜? 응? 아마 이것도 설명 할 수 있습니다 http://stackoverflow.com/questions/5591995/is-move-by-lvalue-broken-unfinished-in-msvc2010 –