Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C++

คลาสการจัดเก็บของตัวแปรใน C ++ คืออะไร


คลาสหน่วยเก็บข้อมูลกำหนดขอบเขต (การมองเห็น) และอายุการใช้งานของตัวแปรและ/หรือฟังก์ชันภายในโปรแกรม 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 ได้รับการประกาศให้เปลี่ยนแปลงได้