c++ - What does the single ampersand mean here? -


उत्तर से।

  वर्ग लपेटो {सार्वजनिक: ऑपरेटर ओबज () const & amp; {...} // मुझसे कॉपी करें ऑपरेटर ओबज () और amp; amp; {...} // मेरी ओर से चलो निजी: obj data_; };  

मुझे पता है कि & amp; amp; & amp; amp; & amp;; का अर्थ है कि जब कोई ऑब्जेक्ट एक रैवल्यू संदर्भ होता है लेकिन एकल एम्परसेंड का क्या मतलब है? एम्परसेंड के बिना यह कैसे अलग है?

इसका मतलब है कि जब सदस्य वस्तु है Lvalue संदर्भ।

[C ++ 11: 9.3.1 / 5]: एक गैर-स्थिर सदस्य फ़ंक्शन को रेफरी क्वालिफायर (8.3.5); देखें 13.3.1।

[C ++ 11: 13.3.1 / 4]: गैर-स्थिर सदस्य कार्यों के लिए, निहित वस्तु पैरामीटर का प्रकार

  • " सीवी एक्स के लिए लावल्यू संदर्भ रेफ़-क्वालीफायर के बिना या & amp; < रेफ़-क्वालिफायर
  • " cv एक्स " के लिए rvalue संदर्भ < > & Amp; amp; & amp; amp; amp; रिफ़-क्वालिफायर

जहां एक्स उस वर्ग का है जिसमें समारोह सदस्य है और cv सदस्य कार्य घोषणा पर सीवी-योग्यता है [..]

(और कुछ और नियम जिन्हें मैं नहीं मिल सकता है)

बिना एक रेफरी क्वालीफायर , फ़ंक्शन को हमेशा अभिव्यक्ति के मूल्य वर्ग की परवाह किए बिना, जिसे आप इसे लागू कर रहे हैं, हमेशा लागू किया जा सकता है:

  struct foo {void bar ) {} Void bar1 () & amp; {} Void bar2 () & amp; amp; {}}; Int main () {foo ()। बार (); // (हमेशा ठीक) foo ()। Bar1 (); // संकलन नहीं करता क्योंकि bar1 () को एक lvalue foo () की आवश्यकता है। Bar2 (); फू एफ; f.bar (); // (हमेशा ठीक) f.bar1 (); f.bar2 (); // संकलित नहीं करता क्योंकि bar2 () को एक rvalue}  

(धन्यवाद प्राटोरीयन) की आवश्यकता है


Comments