2013-07-03 11 views
9

मेरे पास मूल रूप से दो प्रश्न हो सकते हैं, इसलिए वे उन्हें एक में डाल देंगे।एनम क्लास सी ++ 11 संदर्भ या मूल्य

क्या हमें कार्य करने के दौरान संदर्भ या मूल्य से सी ++ 11 में enum क्लास पास करना चाहिए। यह विरासत में प्राचीन प्रकार का विरासत है, लेकिन क्या यह पूरी वस्तु है जो पारित हो जाती है? चूंकि enum कक्षाएं सुरक्षित हैं;

enum class MyEnumClass : unsigned short { 
    Flag1 = 0, 
    Flag2 = 1, 
    Flag3 = 2, 
    Flag4 = 4, 
}; 

अब कहते हैं कि हम समारोह sig है

const char* findVal(const MyEnumClass& enumClass); 
            ^
    should this be by const ref? __| 

मेरे दूसरे प्रश्न का उत्तर है की सुविधा देता है -

SHOULD IT BE BY MOVE like (MyEnumClass&&) - I am still learning/understanding 
move semantics and rvalue so I am not sure if move semantics are only for 
constructors or can be for member or static funcs - 

उत्तर

4

यह आदिम प्रकार इनहेरिट नहीं है बल्कि यह कार्यान्वयन उपयोग करने के लिए कहता है निर्दिष्ट प्रकार (unsigned short) गणक के लिए अंतर्निहित प्रकार के रूप में।

आप बस एनम क्लास ऑब्जेक्ट को किसी भी अन्य वर्ग ऑब्जेक्ट के रूप में देख सकते हैं और कार्यों को पारित करते समय समान नियम लागू कर सकते हैं।

  • यदि आप फ़ंक्शन के अंदर enum क्लास ऑब्जेक्ट को संशोधित करना चाहते हैं, तो इसे संदर्भ से पास करें।
  • यदि आप केवल फ़ंक्शन के अंदर ऑब्जेक्ट को पढ़ना चाहते हैं तो इसे निरंतर संदर्भ से पास करें।

ले जाएं अर्थशास्त्र एक भाषा रन-टाइम प्रदर्शन बढ़ाने वाली सुविधा है जो कॉपी सेमेन्टिक्स को लागू करने के बजाय राजस्व से स्थानांतरित करने के अवसरों का उपयोग करती है जो प्रदर्शन गहन हैं। आर-वैल्यू रेफरेंस और लेवल सेमेन्टिक्स न केवल कन्स्ट्रक्टर को ले जाने के लिए सीमित हैं और असाइनमेंट ऑपरेटर ले जाते हैं लेकिन इन्हें अन्य कार्यों के साथ भी इस्तेमाल किया जा सकता है। यदि आपके पास ऐसे परिदृश्य हैं जो इस अनुकूलन का उपयोग कर सकते हैं तो उनका उपयोग करने के लिए यह बिल्कुल ठीक है।

+3

शायद इस बात से संकेत मिलता है कि इस मामले में आगे बढ़ने से कुछ भी हासिल नहीं किया जा सकता है। – juanchopanza

+0

@juanchopanza: सच है, ठीक है। धन्यवाद! –

3

मानते हैं कि एन्युमरेट्स निर्दिष्ट प्रकार unsigned short को अंतर्निहित प्रकार के रूप में उपयोग करते हैं, जैसा कि आलोक सेव ने बताया है, संभवतः ऐसी वस्तुओं को मूल्य से पारित करना एक अच्छा विचार है (जब तक कि आप एक तरफ फ़ंक्शन में अपना मान बदलना नहीं चाहते प्रभाव, इस मामले में आपको संदर्भ का उपयोग करना चाहिए।)

संबंधित मुद्दे