في C ++ ، ماذا يحدث إذا أعلنت وظيفتان مختلفتان نفس المتغير الثابت؟

StackOverflow https://stackoverflow.com/questions/4108147

سؤال

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 هل تشير إلى.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top