यह रावल्यू क्यों अस्पष्ट है? मेरे पास एए और एए & हो सकता है और संकलक AA&
का उपयोग करने के बारे में जानेंगे। लेकिन जब मैं तीसरे विकल्प में जोड़ता हूं तो मुझे एक त्रुटि मिलती है। जाहिर है एए & & एक बेहतर अधिभार है तो इंटेल के लिए int जैसे अन्य लोग लंबे समय तक बेहतर होते हैं। यह संदिग्ध क्यों है? क्या कोई तरीका है कि मैं सभी 3 ओवरलोड रख सकता हूं और इसे स्पष्ट कर सकता हूं कि मैं कौन सा चाहता हूं? (टाइपकास्टिंग (AA&&)
ऐसा नहीं करेगा)।यह रावल्यू क्यों अस्पष्ट है?
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());
}
(एक तरफ ध्यान दें पर, अपने शून्य arity 'movetest' समारोह एक स्थानीय चर के लिए एक संदर्भ देता है।) – GManNickG
(मैं भी हूँ सामान्य रूप से कहें कि आप तीनों ओवरलोड को वैसे भी नहीं चाहते हैं।) – GManNickG
@GMan: क्या ... क्यों? है ना? हो सकता है कि आप इसे भी समझा सकें http://stackoverflow.com/questions/5591995/is-move-by-lvalue-broken-unfinished-in-msvc2010 –