ما هو std::span في لغة C++ ومتى يجب استخدامه؟
مرحبًا أيها الزملاء! لقد كنت أكتب بلغة C++ لمدة عام تقريبًا، لكنني أواجه باستمرار مشكلة تمرير المصفوفات والمخازن المؤقتة إلى الدوال. عادةً ما أمرر مؤشرًا للعنصر الأول والحجم بشكل منفصل، لكن هذا يبدو مرهقًا وعرضة للأخطاء. على سبيل المثال:\n\n```cpp\nvoid process_data(int* arr, size_t size) {\n for (size_t i = 0; i < size; ++i) {\n // نفعل شيئًا مع arr[i]\n }\n}\n\nint main() {\n int data[] = {1, 2, 3, 4, 5};\n process_data(data, 5); // يعمل، لكن من السهل الخطأ في الحجم\n process_data(data, 100); // سلوك غير محدد، خطأ!\n}\n```\n\nمؤخرًا صادفت `std::span` في C++20. قرأت التوثيق، لكنني لم أفهم تمامًا كيف هو أفضل من المؤشر العادي + الحجم. يبدو أنه مجرد "view" على المصفوفة. لماذا نحتاجه؟ متى يجب استخدامه بدلاً من