c++ - इस असाइनमेंट ऑपरेटर के बाद एम्परसेंड का क्या मतलब है?




c++11 assignment-operator (2)

इसका मतलब है कि यह कार्य केवल अंतराल पर कॉल करने योग्य है। तो यह विफल हो जाएगा क्योंकि असाइनमेंट ऑपरेटर फ़ंक्शन को एक रेवले ऑब्जेक्ट ऑब्जेक्ट पर कहा जाता है:

C() = x;

मैं "नियम-पाँच" के बारे में इस अच्छे उत्तर के माध्यम से पढ़ रहा था और मैंने कुछ ऐसा देखा है जिसे मैं पहले कभी याद नहीं करता:

class C {
  ...
  C& operator=(const C&) & = default;
  C& operator=(C&&) & = default;
  ...
};

कॉपी असाइनमेंट ऑपरेटर के लिए & मूव असाइनमेंट ऑपरेटर के लिए & = default सामने रखे गए & चरित्र का उद्देश्य क्या है? क्या किसी के पास इसके लिए कोई संदर्भ है?


यह एक सुविधा का हिस्सा है, जो C ++ 11 गैर-स्थैतिक सदस्य कार्यों के बीच अंतर करने की अनुमति देता है कि क्या उन्हें एक अंतराल या अंतराल पर बुलाया जा रहा है।

उपरोक्त मामले में, कॉपी असाइनमेंट ऑपरेटर को यहाँ डिफ़ॉल्ट रूप से केवल lvalues ​​पर बुलाया जा सकता है। यह अच्छी तरह से स्थापित होने वाले अंतराल और अंतराल संदर्भ बाइंडिंग के नियमों का उपयोग करता है; यह सिर्फ उन्हें this लिए स्थापित करता है।

उपरोक्त मामले में, कॉपी असाइनमेंट ऑपरेटर केवल तभी डिफॉल्ट होता है, जब कॉपी की जा रही वस्तु गैर-कॉन्स्टल लैवल्यू रेफरेंस से जुड़ सकती है। तो यह ठीक है:

C c{};
c = C{};

यह नहीं है:

C{} = c;

यहाँ अस्थायी एक अंतराल संदर्भ के लिए बाध्य नहीं किया जा सकता है, और इस तरह कॉपी असाइनमेंट ऑपरेटर को नहीं बुलाया जा सकता है। और चूंकि यह घोषणा सामान्य कॉपी असाइनमेंट ऑपरेटर के निर्माण को रोकती है, इसलिए यह वाक्यविन्यास अस्थायी रूप से कॉपी-असाइनमेंट (या स्थानांतरित-असाइनमेंट) को प्रभावी ढंग से रोकता है। इसे पुनर्स्थापित करने के लिए, आपको && संस्करण जोड़ना होगा:

C& operator=(const C&) && = default;
C& operator=(C&&) && = default;




default-implementation