के बीच ओवरलोड रिज़ॉल्यूशन सभी तीन कार्यों को देखते हुए, यह कॉल संदिग्ध है।ऑब्जेक्ट, रावल्यू संदर्भ, कॉन्स्ट संदर्भ
int f(int);
int f(int &&);
int f(int const &);
int q = f(3);
f(int)
कारणों दोनों बजना और जीसीसी निकाला जा रहा है lvalue संदर्भ से अधिक rvalue संदर्भ को पसंद करते हैं। लेकिन f(int)
के साथ अस्पष्टता में संदर्भ अधिभार परिणामों को हटाने के बजाय।
ओवरलोड रिज़ॉल्यूशन आमतौर पर सख्त आंशिक क्रम के संदर्भ में किया जाता है, लेकिन int
दो चीजों के बराबर लगता है जो एक-दूसरे के बराबर नहीं हैं। यहां नियम क्या हैं? मुझे इसके बारे में एक दोष रिपोर्ट याद है।
क्या कोई मौका int &&
भविष्य में मानक में int
से अधिक पसंद किया जा सकता है? संदर्भ को प्रारंभकर्ता से बांधना चाहिए, जबकि ऑब्जेक्ट प्रकार इतना बाध्य नहीं है। इसलिए T
और T &&
के बीच अधिभार प्रभावी ढंग से हो सकता है "अगर मुझे स्वामित्व दिया गया है तो मौजूदा ऑब्जेक्ट का उपयोग करें, अन्यथा प्रतिलिपि बनाएं।" (यह शुद्ध पास-बाय-वैल्यू के समान है, लेकिन आगे बढ़ने के ऊपरी हिस्से को बचाता है।) चूंकि ये कंपाइलर वर्तमान में काम करते हैं, यह T const &
और T &&
ओवरलोडिंग और स्पष्ट रूप से प्रतिलिपि करके किया जाना चाहिए। लेकिन मुझे यह भी यकीन नहीं है कि यह सख्ती से मानक है।
आप राज्य' पूर्णांक && कोड में लेकिन फिर प्रश्न में 'टी &&' को सामान्यीकृत करें, उनके बावजूद अलग-अलग होने के बावजूद। यह क्या है? – Rapptz
@ रैपेटज़ मैंने वास्तविक दुनिया के उपयोग में संभावित अर्थ के बारे में बात करते समय केवल 'टी' कहा था। मेरा मतलब यह नहीं है सही अग्रेषण का सुझाव देते हैं, यह एक पूरी तरह से अलग ballgame है। – Potatoswatter