मैं परिपत्र होने के लिए नफरत है, लेकिन एक rvalue संदर्भ टी कार्य करने के लिए ype फ़ंक्शन प्रकार के लिए एक रैल्यू संदर्भ है। फ़ंक्शन प्रकार जैसी कोई चीज़ है, उदा। void()
। और आप इसके लिए एक रैल्यू संदर्भ बना सकते हैं।
N3055 द्वारा प्रस्तुत वर्गीकरण प्रणाली के संदर्भ में, यह एक xvalue है।
इसका उपयोग दुर्लभ और अस्पष्ट है, लेकिन यह बेकार नहीं है। उदाहरण के लिए विचार करें:
void f() {}
...
auto x = std::ref(f);
x
टाइप है:
std::reference_wrapper<void()>
और अगर आप reference_wrapper
के लिए सार को देखो यह शामिल हैं:
reference_wrapper(T&) noexcept;
reference_wrapper(T&&) = delete; // do not bind to temporary objects
इस उदाहरण T
में समारोह प्रकार void()
है । और इसलिए दूसरी घोषणा यह सुनिश्चित करने के उद्देश्य से reference_wrapper
को रैवल्यू तर्क के साथ निर्मित नहीं किया जा सकता है, इसके उद्देश्य के लिए फ़ंक्शन प्रकार का एक रैल्यू संदर्भ बनाता है। भले ही T
न हो।
यदि यह कार्य के लिए एक रावल्यू संदर्भ बनाने के लिए कानूनी नहीं था, तो इस सुरक्षा के परिणामस्वरूप संकलन समय त्रुटि होगी, भले ही हमने निर्माता को T
नहीं दिया।
स्रोत
2011-08-10 20:31:43
क्या आपने अंततः उत्तर को समझ लिया? मैंने उत्तर के तहत एक टिप्पणी छोड़ दी है, इसलिए यदि आप स्पष्टीकरण से अवगत हैं तो कृपया इसे प्रदान करें। धन्यवाद –