स्टोरेज क्लास एक C++ प्रोग्राम के भीतर वेरिएबल और/या फंक्शन्स के स्कोप (दृश्यता) और लाइफ-टाइम को परिभाषित करता है। ये विनिर्देशक उस प्रकार से पहले होते हैं जिसे वे संशोधित करते हैं। निम्नलिखित भंडारण वर्ग हैं, जिनका उपयोग C++ प्रोग्राम में किया जा सकता है।
- स्वतः
- पंजीकरण
- स्थिर
- बाहरी
- परिवर्तनीय
सी में, ऑटो स्टोरेज क्लास स्पेसिफायर आपको स्वचालित स्टोरेज के साथ एक वेरिएबल को स्पष्ट रूप से घोषित करने देता है। एक ब्लॉक के अंदर घोषित चर के लिए ऑटो स्टोरेज क्लास डिफ़ॉल्ट है। जिस ब्लॉक में x घोषित किया गया था, उस ब्लॉक से बाहर निकलने पर स्वचालित संग्रहण वाला एक चर x हटा दिया जाता है।
आप केवल ब्लॉक में घोषित चर के नाम या फ़ंक्शन पैरामीटर के नाम पर ऑटो स्टोरेज क्लास विनिर्देशक लागू कर सकते हैं। हालाँकि, इन नामों में डिफ़ॉल्ट रूप से स्वचालित संग्रहण होता है। इसलिए स्टोरेज क्लास स्पेसिफायर ऑटो आमतौर पर डेटा डिक्लेरेशन में बेमानी होता है।
इसे शुरू में केवल वाक्य-विन्यास संगतता के लिए C++ में ले जाया गया था, हालांकि बाद में इसका अपना अर्थ, स्वचालित प्रकार की कटौती हो गई।
सी में, रजिस्टर स्टोरेज क्लास विनिर्देशक संकलक को इंगित करता है कि ऑब्जेक्ट को मशीन रजिस्टर में संग्रहीत किया जाना चाहिए। एक्सेस टाइम को कम करके प्रदर्शन को बढ़ाने की उम्मीद में रजिस्टर स्टोरेज क्लास स्पेसिफायर आमतौर पर भारी उपयोग किए जाने वाले चर, जैसे लूप कंट्रोल वेरिएबल के लिए निर्दिष्ट किया जाता है। हालांकि, कंपाइलर को इस अनुरोध का सम्मान करने की आवश्यकता नहीं है। अधिकांश प्रणालियों पर उपलब्ध सीमित आकार और रजिस्टरों की संख्या के कारण, कुछ चर वास्तव में रजिस्टरों में रखे जा सकते हैं।
स्टैटिक स्टोरेज क्लास कंपाइलर को प्रोग्राम के जीवन-काल के दौरान एक स्थानीय वैरिएबल को अस्तित्व में रखने के लिए निर्देश देता है, न कि हर बार इसे बनाने और नष्ट करने के लिए और इसके दायरे से बाहर हो जाता है। इसलिए, स्थानीय चर को स्थिर बनाने से वे फ़ंक्शन कॉल के बीच अपने मान बनाए रख सकते हैं।
बाहरी भंडारण वर्ग विनिर्देशक आपको उन वस्तुओं को घोषित करने देता है जिनका उपयोग कई स्रोत फ़ाइलें कर सकती हैं। एक बाहरी घोषणा वर्णित चर को वर्तमान स्रोत फ़ाइल के अगले भाग द्वारा प्रयोग करने योग्य बनाती है। यह घोषणा परिभाषा को प्रतिस्थापित नहीं करती है। घोषणा का उपयोग बाहरी रूप से परिभाषित चर का वर्णन करने के लिए किया जाता है।
म्यूटेबल स्टोरेज क्लास स्पेसिफायर का उपयोग केवल क्लास डेटा सदस्य पर किया जाता है ताकि इसे संशोधित किया जा सके, भले ही सदस्य कॉन्स्ट के रूप में घोषित ऑब्जेक्ट का हिस्सा हो। आप स्थिर या स्थिरांक, या संदर्भ सदस्यों के रूप में घोषित नामों के साथ परिवर्तनशील विनिर्देशक का उपयोग नहीं कर सकते।
उदाहरण
class A { public: A() : x(4), y(5) { }; mutable int x; int y; }; int main() { const A var2; var2.x = 345; // var2.y = 2345; }
कंपाइलर असाइनमेंट var2.y =2345 की अनुमति नहीं देगा क्योंकि var2 को const के रूप में घोषित किया गया है। कंपाइलर असाइनमेंट var2.x =345 की अनुमति देगा क्योंकि A::x को परिवर्तनशील घोषित किया गया है।