Avatar ·

ما هو std::span في C++ ومتى يجب استخدامه؟

مرحبًا أيها الزملاء! أكتب بلغة C++ منذ حوالي عام، لكني أواجه باستمرار مشكلة تمرير المصفوفات وbuffers إلى الدوال. عادةً ما أمرر pointer إلى العنصر الأول والحجم بشكل منفصل، لكن هذا يبدو مرهقًا وعرضة للأخطاء. على سبيل المثال:\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); // undefined behavior، خطأ!\n}\n```\n\nمؤخرًا صادفت `std::span` في C++20. قرأت documentation لكني لم أفهم تمامًا ما الذي يجعله أفضل من المؤشر العادي + الحجم. يبدو أنه مجرد "view" على المصفوفة. لماذا نحتاجه؟ متى يجب استخدامه بدلاً من