Avatar ·

لماذا يجب تفضيل مساحات الأسماء غير المسماة على الدوال الثابتة في C++؟

مرحبًا بالجميع! أنا مطور C++ مبتدئ، وأثناء دراسة موضوع "الربط الداخلي" (internal linkage) صادفت طريقتين لجعل الدوال أو المتغيرات محلية لوحدة ترجمة واحدة (translation unit). الطريقة الأولى هي استخدام الكلمة المفتاحية `static` للدوال والمتغيرات العامة. على سبيل المثال: ```cpp // file.cpp static void helperFunction() { // ... some implementation } static int internalCounter = 0; ``` الطريقة الثانية هي وضع كل شيء في مساحة اسم غير مسماة (unnamed namespace): ```cpp // file.cpp namespace { void helperFunction() { // ... some implementation } int internalCounter = 0; } ``` أفهم أن كلا الأسلوبين يجعلان الرموز مرئية فقط داخل هذا الملف. لكنني كثيرًا ما أسمع من زملائي ذوي الخبرة أن استخدام `static` للدوال هو "ممارسة قديمة" من لغة C، وأنه في لغة C++ الحديثة يجب استخدام مساحات الأسماء غير المسماة. هل يمكنكم شرح لماذا هذا؟