जब मेरे वर्गों लेखन, M_ के साथ सभी सदस्य चर लगाकर मैं हमेशा एक अच्छा लड़का किया गया है:सी ++ निर्माता प्रारंभ सूची विचित्रता
class Test {
int m_int1;
int m_int2;
public:
Test(int int1, int int2) : m_int1(int1), m_int2(int2) {}
};
int main() {
Test t(10, 20); // Just an example
}
हालांकि, हाल ही मैं ऐसा करना भूल गया और लेखन समाप्त हो गया:
class Test {
int int1;
int int2;
public:
// Very questionable, but of course I meant to assign ::int1 to this->int1!
Test(int int1, int int2) : int1(int1), int2(int2) {}
};
मानो या नहीं, कोई त्रुटि/चेतावनियों के साथ संकलित कोड और असाइनमेंट सही तरीके से हुआ! यह केवल तब हुआ जब मेरे कोड में जांच करने से पहले अंतिम जांच कर रही थी जब मुझे एहसास हुआ कि मैंने क्या किया है।
मेरा प्रश्न है: मेरा कोड संकलित क्यों हुआ? क्या ऐसा कुछ ऐसा है जो सी ++ मानक में अनुमत है, या यह केवल संकलक होने का मामला है? यदि आप सोच रहे थे, तो मैं विजुअल स्टूडियो 2008
आपके नामों को मंगल करना मुश्किल है जो मैं "अच्छा लड़का" होने पर विचार करता हूं। जैसा कि आपने पाया है, आमतौर पर यह जरूरी नहीं है, और दुर्लभ अवसरों पर जहां, यह है 'हमें->' उपसर्ग मिला है। – jalf
शायद एक डुप्ली, http://stackoverflow.com/questions/2227244/what-if-a-constructor-parameter-has-the-same-name-as-a-member-variable-in-c – Abhay
@jalf देखें : दूसरी ओर कुछ प्रकार के सदस्य-var संकेतक कभी-कभी पढ़ने के कोड को आसान बना सकते हैं (जब मैं मौजूदा सम्मेलन को तोड़ता नहीं हूं तो मैं पिछला _ का उपयोग करता हूं)। –