क्यों std :: सी ++ मानक में समारोह <> :: ऑपरेटर() की परिभाषा है:सी ++ 11 std :: समारोह और सही अग्रेषण
R operator()(ArgTypes...) const;
और नहीं
R operator()(ArgTypes&&...) const;
?
एक यह है कि लगता होगा सही ढंग से आगे मानकों, हम जरूरत के लिए & & और फिर समारोह शरीर में std::forward<ArgTypes>...
का उपयोग कॉल अग्रेषण कब?
मैं आंशिक रूप से std :: समारोह इस परीक्षण करने के लिए reimplemented और मुझे पता चला है कि अगर मैं & & उपयोग करते हैं, मैं "को नहीं बांध सकता 'xxx' lvalue को 'xxx & &'" जी ++ से जब मैं पारित करने के लिए बाद में प्रयास ऑपरेटर के मूल्य के आधार पर पैरामीटर()। मैंने सोचा कि मुझे रावल/अग्रेषण अवधारणाओं की पर्याप्त समझ है, लेकिन फिर भी मैं इस बिंदु को नहीं समझ सकता। मैं क्या खो रहा हूँ?
धन्यवाद, सब कुछ अब सही समझ में आता है। – airman
@Xeo, आपका कोड सही ढंग से संकलित करता है ... http://ideone.com/7TyCB8 f (i) में कोई त्रुटि नहीं है, क्या आप "// error" से क्या मतलब समझ सकते हैं, या शायद मैं इसका उपयोग कर रहा हूं गलत कंपाइलर धन्यवाद। –
@WillBradley: 'main' के शीर्ष पर टिप्पणी दोबारा पढ़ें: *** मान लीजिए कि' std :: function :: ऑपरेटर() का हस्ताक्षर वास्तव में 'आर (Args && ...)' - यह, 'ऑपरेटर()' के लिए 'v35 (int &&) ''' कार्य करेगा, जो अब केवल रावल स्वीकार करेगा। –
Xeo