मैं स्कॉट के अंतिम मास्टर टुकड़े में सी ++ 11 और 14 के बारे में सार्वभौमिक संदर्भों के बारे में पढ़ रहा हूं, जिसमें कहा जा सकता है कि किसी भी शब्द या लालसा प्रकार के लिए असाइन किए गए तर्क के बावजूद संदर्भ पैरामीटर में सार्वभौमिक संदर्भ नामक कुछ है जो पारित तर्क के प्रकार के आधार पर एल/रावल्यू को घटा सकता है। मैं समझ सकते हैं क्या एक सार्वभौमिक संदर्भ के रूप में पैरामीटर, लेकिन यह मेरे लिए स्पष्ट नहीं है एक बात है क्यों प्रकार पैरामीटर const T&& p
को स्थिरांक जोड़ने rvalue के रूप में पी कर बनाता है:क्यों 'कॉन्स्ट' जोड़ना सार्वभौमिक संदर्भ बनाता है
template<typename T>
void f(T&& param); // param is an universal reference
template<typename T>
void f(const T&& param); // param is an rvalue reference
const
से अधिक कार्य करती है यह संदर्भ पैरामीटर को असाइन किए जाने पर।
ओपी को उलझन में प्रभावशाली मॉडर्न सी ++ _ में आइटम 24 के हिस्से में वापस टाई करने के लिए, स्कॉट का वर्णन (ढीले) सार्वभौमिक संदर्भों को रेवल्यू संदर्भों का वर्णन करने के लिए संदर्भित करें। 14.8.2.1 मानक उद्धरण में पहली (गैर-जोरदार) वाक्य (_ "यदि पी एक सीवी-योग्य प्रकार है, तो पी के प्रकार ** के शीर्ष स्तर के सीवी-क्वालीफायर ** को कटौती के लिए अनदेखा किया जाता है ** _ _ स्पष्ट रूप से स्कॉट के बयान बताते हैं कि _ "यहां तक कि 'कॉन्स्ट' क्वालीफायर की सरल उपस्थिति सार्वभौमिक होने से संदर्भ को अयोग्य घोषित करने के लिए पर्याप्त है" _ (पुस्तक, आइटम 24 से उद्धरण)। – dfri
@dfri धन्यवाद, मेरे पास पास के ईएमसी ++ की डिजिटल कॉपी नहीं थी। – TemplateRex
क्यों अधिक प्रेरणा के लिए: कभी-कभी हमें यह कहने की ज़रूरत होती है: केवल एक स्तर पर बाध्य न करें, केवल तब्दीलों के लिए: 'टेम्पलेट शून्य क्रेफ (कॉन्स्ट टी एंड&) = हटाएं;'। –