ما هي نقاط التسلسل (sequence points) وكيف ترتبط بالسلوك غير المحدد (undefined behavior) في C++؟
مرحباً بالجميع! أنا مطور C++ مبتدئ واجهت مؤخراً مفهوم "نقاط التسلسل" (sequence points). في العديد من المنتديات يُكتب أن انتهاك قواعد نقاط التسلسل يؤدي إلى سلوك غير محدد (undefined behavior)، لكنني لا أفهم تماماً ما يعنيه هذا عملياً.
إليك مثال بسيط يربكني:
```cpp
int i = 0;
int result = i++ + i++;
```
قرأت في مكان ما أن هذا الكود يسبب سلوكاً غير محدد. لكن لماذا؟ ففي النظرة الأولى يبدو أن النتيجة ستكون قابلة للتنبؤ: أولاً تؤخذ القيمة القديمة لـ `i` (0)، ثم تزداد، وهكذا مرتين. كنت أتوقع أن تصبح `result` تساوي `0 + 1 = 1`، وأن تصبح `i` تساوي `2`. لكن المترجم يقول إن هذا سلوك غير محدد (UB).
مثال آخر:
```cpp
int arr[5] = {0};
int i = 0;
arr[i] = i++;
```
هنا أقوم بتعيين قيمة لعنصر المصفوفة باستخدام فهرس يتغير هو نفسه. لا أفهم أي قيمة للفهرس ستُستخدم — القديمة أم الجديدة؟ ولماذا يعتبر هذا خطيراً؟
هل يمكن