คลาสหน่วยเก็บข้อมูลกำหนดขอบเขต (การมองเห็น) และอายุการใช้งานของตัวแปรและ/หรือฟังก์ชันภายในโปรแกรม C++ ตัวระบุเหล่านี้นำหน้าประเภทที่แก้ไข มีคลาสการจัดเก็บต่อไปนี้ ซึ่งสามารถใช้ได้ในโปรแกรม C++
- อัตโนมัติ
- ลงทะเบียน
- คงที่
- ภายนอก
- เปลี่ยนแปลงได้
ใน C ตัวระบุคลาสการจัดเก็บอัตโนมัติช่วยให้คุณประกาศตัวแปรด้วยการจัดเก็บอัตโนมัติได้อย่างชัดเจน คลาสการจัดเก็บอัตโนมัติเป็นค่าเริ่มต้นสำหรับตัวแปรที่ประกาศภายในบล็อก ตัวแปร x ที่มีที่เก็บข้อมูลอัตโนมัติจะถูกลบออกเมื่อบล็อคที่ x ถูกประกาศออก
คุณสามารถใช้ตัวระบุคลาสการจัดเก็บอัตโนมัติกับชื่อของตัวแปรที่ประกาศในบล็อกหรือชื่อของพารามิเตอร์ฟังก์ชันเท่านั้น อย่างไรก็ตาม ชื่อเหล่านี้โดยค่าเริ่มต้นจะมีที่เก็บข้อมูลอัตโนมัติ ดังนั้น ตัวระบุคลาสการจัดเก็บอัตโนมัติจึงมักจะซ้ำซ้อนในการประกาศข้อมูล
แรกเริ่มมีการส่งต่อไปยัง C++ เพื่อความเข้ากันได้ทางวากยสัมพันธ์เท่านั้น ถึงแม้ว่าภายหลังจะได้รับความหมายเป็นของตัวเอง นั่นคือการลดประเภทโดยอัตโนมัติ
ใน C ตัวระบุคลาสหน่วยเก็บข้อมูลรีจิสเตอร์จะระบุให้คอมไพเลอร์ทราบว่าอ็อบเจ็กต์ควรเก็บไว้ในเครื่องลงทะเบียน โดยทั่วไปแล้ว register storage class specifier จะถูกระบุสำหรับตัวแปรที่ใช้งานหนัก เช่น ตัวแปรควบคุมลูป โดยหวังว่าจะเพิ่มประสิทธิภาพโดยลดเวลาในการเข้าถึงให้น้อยที่สุด อย่างไรก็ตาม คอมไพเลอร์ไม่จำเป็นต้องทำตามคำร้องขอนี้ เนื่องจากระบบส่วนใหญ่มีขนาดและจำนวนของรีจิสเตอร์ที่จำกัด ตัวแปรเพียงไม่กี่ตัวจึงสามารถใส่ลงในรีจิสเตอร์ได้
คลาสสตอเรจแบบสแตติกสั่งให้คอมไพเลอร์เก็บตัวแปรโลคัลให้คงอยู่ตลอดอายุการใช้งานของโปรแกรม แทนที่จะสร้างและทำลายมันทุกครั้งที่เข้ามาและออกจากขอบเขต ดังนั้น การทำให้ตัวแปรโลคัลคงที่ทำให้สามารถรักษาค่าระหว่างการเรียกใช้ฟังก์ชันได้
ตัวระบุคลาสการจัดเก็บข้อมูลภายนอกช่วยให้คุณสามารถประกาศอ็อบเจ็กต์ที่ไฟล์ต้นทางหลายไฟล์สามารถใช้ได้ การประกาศภายนอกทำให้ตัวแปรที่อธิบายสามารถใช้งานได้โดยส่วนที่ต่อจากนี้ไปของไฟล์ต้นฉบับปัจจุบัน การประกาศนี้ไม่ได้แทนที่คำจำกัดความ การประกาศใช้เพื่ออธิบายตัวแปรที่กำหนดโดยภายนอก
ตัวระบุคลาสหน่วยเก็บข้อมูลที่เปลี่ยนแปลงได้จะใช้กับสมาชิกข้อมูลคลาสเท่านั้นเพื่อให้สามารถแก้ไขได้ แม้ว่าสมาชิกจะเป็นส่วนหนึ่งของอ็อบเจ็กต์ที่ประกาศเป็น const คุณไม่สามารถใช้ตัวระบุที่เปลี่ยนแปลงได้กับชื่อที่ประกาศเป็นสแตติกหรือ const หรือสมาชิกอ้างอิง
ตัวอย่าง
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 ได้รับการประกาศให้เปลี่ยนแปลงได้