c++ - सदस्य कार्यों में स्टेटिक चर




static scope (4)

अच्छे उदाहरण के लिए धन्यवाद! वास्तव में ऐसा कुछ हासिल करने का एक तरीका होगा जो स्थिर int के दायरे को उदाहरण के लिए विशिष्ट बनाता है, ताकि उदाहरण के लिए o1.foo (); // i = 1 और $ o2.foo (); // i> = 1 ...? - स्टिंगरी

मुझे लगता है कि एकमात्र तरीकों में से एक को बूल क्लास सदस्य चर बनाने और उसके मूल्य पर प्रारंभिक स्थिति बनाना होगा और प्रारंभिक कार्य करते समय केवल अपना मूल्य बदलना होगा। मैं एक संभावित रूप से अधिक परिष्कृत तरीके की कल्पना कर सकता हूं जहां स्थिर नक्शा चर के उदाहरण के रूप में उदाहरण है, लेकिन यह थोड़ा जटिल लगता है।

क्या कोई कृपया बता सकता है कि सदस्य कार्यों में स्थिर चर C ++ में कैसे काम करते हैं।

निम्नलिखित वर्ग को देखते हुए:

class A {
   void foo() {
      static int i;
      i++;
   }
}

यदि मैं A कई उदाहरण घोषित करता हूं, तो एक उदाहरण पर foo() को कॉल करने से सभी उदाहरणों पर स्थैतिक चर बढ़ जाता है? या केवल वह जिसे बुलाया गया था?

मैंने माना कि प्रत्येक इंस्टेंस की अपनी प्रतिलिपि होगी, लेकिन कुछ कोड के माध्यम से कदम उठाने के लिए मुझे अन्यथा संकेत मिलता है।


चूंकि class A एक गैर-टेम्पलेट वर्ग है और A::foo() एक गैर-टेम्पलेट फ़ंक्शन है। कार्यक्रम के अंदर static int i की केवल एक प्रति होगी।

किसी ऑब्जेक्ट का कोई भी उदाहरण उसी i और जीवनकाल को प्रभावित करेगा, i प्रोग्राम के माध्यम से रहूंगा। एक उदाहरण जोड़ने के लिए:

A o1, o2, o3;
o1.foo(); // i = 1
o2.foo(); // i = 2
o3.foo(); // i = 3
o1.foo(); // i = 4

मैंने एक बार एक कॉन्स char * छोड़ा जो एक स्थिर स्थानीय (सदस्य समारोह में) एक और सी शैली स्ट्रिंग पर इंगित किया गया था जो वास्तव में कक्षा का एक उदाहरण सदस्य था। ऑब्जेक्ट के विनाशक ने इस विशेष मामले में इंस्टेंस पॉइंटर मेमोरी को मुक्त कर दिया, और कक्षा के अगले उदाहरण में जंक वैल्यू था क्योंकि रनटाइम ने स्थिर स्थानीय को प्रारंभिक माना था, भले ही यह इंगित किया गया था कि यह कहां नहीं होना चाहिए।

वैश्विक कार्यों या स्थिर सदस्य कार्यों के अंदर स्थिर करने के लिए स्टेटिक स्थानीय सबसे आसान हैं।

टेम्पलेट व्यवहार ऊपर कवर किया गया था। थ्रेड सुरक्षा के बारे में कैसे (या, अगर मुझे गलत नहीं है, तो इसकी कमी है)?


सरलीकृत उत्तर: स्थिर चर, भले ही वे एक (गैर-टेम्पलेटेड) वर्ग या एक (गैर-टेम्पलेटेड) फ़ंक्शन के सदस्य हैं, व्यवहार - तकनीकी रूप से - एक वैश्विक लेबल की तरह जो स्कोप कक्षा या फ़ंक्शन तक सीमित है।





scope