المتغير الساكن - Static variable
المتغير الساكن في لغة C++ هو متغير يتم تخصيصه مرة واحدة ويبقى في الذاكرة طوال تنفيذ البرنامج. يمكن الإعلان عن المتغيرات الساكنة في النطاق العالمي، أو نطاق الـ namespace، أو نطاق الـ class، أو نطاق الدالة.
تتم تهيئة المتغيرات الساكنة على النطاق العالمي عند بدء تشغيل البرنامج ويتم تدميرها عند انتهاء البرنامج. تتم تهيئة المتغيرات الساكنة في نطاق الـ namespace عند تحميل الـ namespace ويتم إتلافها عند إلغاء تحميلها. تتم تهيئة المتغيرات الساكنة في الـ classes عند استخدام الـ class لأول مرة ويتم تدميرها عند انتهاء البرنامج. تتم تهيئة المتغيرات الساكنة في الدوال عند استدعاء الدالة لأول مرة ويتم تدميرها عند إرجاع الدالة.
يمكن أن تكون المتغيرات الساكنة مفيدة لمجموعة متنوعة من الأهداف، مثل:
- تخزين معلومات الـ global state: يمكن استخدام المتغيرات الساكنة لتخزين معلومات الـ global state التي يجب الوصول إليها من خلال دوال متعددة في البرنامج.
- تنفيذ المفردات: يمكن استخدام المتغيرات الساكنة لتنفيذ المفردات، وهي classes يمكن أن تحتوي على مثيل واحد فقط.
- تنفيذ الـ lazy initialization: يمكن استخدام المتغيرات الساكنة لتنفيذ الـ lazy initialization، وهي تقنية لتأخير تهيئة المتغير حتى يتم استخدامه لأول مرة.
فيما يلي مثال لمتغير ساكن تم تعريفه في دالة:
#include <iostream> using namespace std; void fun() { static int x = 0; x++; cout << x << endl; } int main() { fun(); fun(); return 0; }
يعرّف هذا البرنامج دالّة تسمى fun()
ثم يستدعيها مرتين من الدالة الرئيسة main()
. الدالة fun()
تعلن عن متغير ساكن يسمى x
ويزيده في كل مرة يتم استدعاؤها. تقوم الدالة بعد ذلك بطباعة قيمة x
إلى شاشة المخرجات.
لأن x
هو متغير ساكن، ويتم الاحتفاظ بقيمته بين استدعاءات الدوال. وهذا يعني أنه عندما يتم إستدعاء الدالة fun()
للمرة الثانية، قيمة المتغير x
ستكون 1 وليس 0. وبالتالي فإن مخرجات البرنامج ستكون كما يلي:
1 2
يوضح هذا البرنامج كيف يمكن استخدام المتغيرات الساكنة لتخزين معلومات الحالة التي يجب الوصول إليها عن طريق استدعاءات متعددة للدالة.