في C ++ ، ماذا يحدث إذا أعلنت وظيفتان مختلفتان نفس المتغير الثابت؟
-
29-09-2019 - |
سؤال
void foo() {
static int x;
}
void bar() {
static int x;
}
int main() {
foo();
bar();
}
المحلول
كل منهم يرون واحد فقط. لا يمكن رؤيته متغير من خارج مجال أنه تم الإعلان عنه.
إذا ، من ناحية أخرى ، فعلت هذا:
static int x;
void foo() {
static int x;
}
int main() {
foo();
}
ومن بعد foo()
ترى فقط محليها x
; ؛ العالمية x
كان "مخفيا" به. لكن التغييرات على واحد لا تؤثر على قيمة الآخر.
نصائح أخرى
المتغيرات متميزة ، كل وظيفة لها نطاقها الخاص. لذلك على الرغم من أن كلا المتغيرين يستمران لعمر العملية ، إلا أنهما لا يتدخلان مع بعضهما البعض.
هذا جيد تمامًا. في الممارسة العملية ، يمكن اعتبار الاسم الفعلي للمتغير في إخراج المترجم على أنه شيء مثل function_bar_x
, ، أي أنه من مسؤولية المترجم الخاص بك التأكد من أن هذه لا تصطدم.
لا شيء يحدث ، كلا المتغيرين لهما نطاق theri و mantain قيمهم للاتصال بالمكالمة
الاختلاف اثنان ثابتان مختلفان.
يترجم المركب كل متغير بطريقة فريدة ، مثل foo_x
و bar_x
في مثالك ، لذلك فهي مهددة بشكل مختلف.
لا تفعل هذا لأن الكود الخاص بك سيكون من الصعب قراءته وصيانته بعد بعض الوقت لأنك لن تتمكن من التقاطها في وقت واحد x
هل تشير إلى.