هل يؤثر const على معاملات الدالة في التوقيع والسلوك في C++؟
مرحباً بالجميع! بدأت في تعلم C++ وواجهت موقفاً غير مفهوم. عندما أكتب دوالاً، غالباً ما أستخدم const للمعاملات لضمان عدم تغييرها داخل الدالة. على سبيل المثال:\n\n```cpp\nvoid print(const std::string& str) {\n std::cout << str << std::endl;\n}\n```\n\nلكن لاحظت مؤخراً أنه إذا أعلنت دالة بدون const ولكن بنفس الاسم والأنواع، فإن المترجم لا يعتبرها overload:\n\n```cpp\nvoid print(const std::string& str) { /* ... */ }\nvoid print(std::string& str) { /* ... */ } // هذا overload\nvoid print(std::string str) { /* ... */ } // هل هذا خطأ أم لا؟\n```\n\nلماذا يحدث ذلك؟ ففي النهاية const في المعامل هو جزء من النوع. لكنني سمعت أنه بالنسبة للمعاملات التي تُمرر بالقيمة (by value)، فإن const لا يؤثر على التوقيع. هل هذا صحيح؟ وهل هناك أي