2011-01-30 20 views
7

निम्नलिखित कोड मेरी मशीन पर काम करता है, लेकिन क्या यह अच्छा अभ्यास/काम करने की गारंटी है?सी ++: प्रारंभिक सूची/नामकरण सम्मेलन

struct MyStruct { 
    MyStruct(int x, int y, int z) : 
     x(x), 
     y(y), 
     z(z) { 
    } 

    int x; 
    int y; 
    int z; 
}; 

विशेष रूप से, x (x) जो मैं चाहता हूं वह करने की गारंटी है? (यानी, क्या प्रारंभिक सूची में वैरिएबल हमेशा उस स्ट्रक्चर/क्लास के सदस्य को देखता है?)

मैं अग्रणी या पिछला अंडरस्कोर का उपयोग नहीं करना चाहता क्योंकि एक्स संरचना का सार्वजनिक सदस्य है।

धन्यवाद!

+0

जबकि संकलक सही काम करता है, किसी भी मानव कोड देख विस्मित कर दिया जाएगा। और यदि वह प्रकार आपके द्वारा दिखाए गए कार्यों से अधिक जटिल है, और आप इसे बनाए रखने के लिए एक दशक और तीन प्रोग्रामर पीढ़ियों को जोड़ते हैं, तो यह लगभग निश्चित रूप से एक गड़बड़ी के रूप में समाप्त हो जाएगा। – sbi

+1

इसके बजाय आप क्या करने की सलाह देंगे? – FrankMN

उत्तर

11

हां, यह अपेक्षा करने की गारंटी है कि आप क्या उम्मीद करते हैं।

एकमात्र चीज जो प्रारंभकर्ता सूची में कोष्ठक के बाहर "बाहर" मौजूद हो सकती है, सदस्य चर हैं। और कोष्ठक के अंदर, सामान्य नियम लागू होते हैं; स्थानीय चर सदस्य चर को छुपाएं।

चाहे यह अच्छा अभ्यास है या नहीं, तो विचार करें कि क्या होता है यदि आप गलती से कन्स्ट्रक्टर तर्क सूची से एक या अधिक तर्क हटाते हैं। कोड अभी भी ठीक संकलित होगा! लेकिन यह रनटाइम पर भयंकर रूप से टूट जाएगा। फिर भी, मैं अभी भी इस पैटर्न का काफी बार उपयोग करता हूं।

0

हां, एक्स (एक्स) वही करता है जो आप चाहते हैं। x (x) सदस्य का नाम है, और एक्स (x) औपचारिक तर्क है।

2

हालांकि यह उम्मीद आप क्या करते हैं, विस्तृत रूप से इस स्थिति की कल्पना:

class MyStruct { 
public: 
    MyStruct(int x, int y, int z) 
    : x(x), 
     y(y), 
     z(z) 
    { } 
    int x() const; 
    int y() const; 
    int z() const; 

private: 
    int x; 
    int y; 
    int z; 
}; 

कौन सा काम नहीं करेगा। यही कारण है कि मैं अपने वर्ग के सदस्यों को m_ के साथ उपसर्ग करता हूं। यह पाठक को संकेत के साथ बहुत पठनीय कोड की अनुमति देता है कि प्रश्न में पहचानकर्ता वर्ग का हिस्सा है। गैर-उपसर्ग के पहचानकर्ता या तो समारोह तर्क हैं (निर्माता प्रारंभकर्ता सूची में की तरह: m_x(x), या स्थानीय चर में कार्य)।

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