انتقل إلى المحتوى
Topos Uranos

المحارف والقيم المنطقية والتحويلات والثوابت

ملخص

لا يحدّد النوع عدد البايتات التي يشغلها المعطى فحسب، بل يحدّد أيضًا كيف تُقرأ بتاته: فالبايت نفسه هو الحرف «A» عند char والعدد 65 عند int. يُكمل هذا الدرس الأنواع الأساسية بالمحارف والقيم المنطقية، ويدرس الانتقال من نوع إلى آخر: التحويلات الضمنية، التي يجريها المترجم دون أن تُطلب منه وقد تُضيّع معلومات؛ والتحويل الصريح بـ static_cast؛ والتهيئة بالأقواس المعقوصة، التي ترفض الضياع. ويختم بالثوابت، const وconstexpr، التي تحوّل نيّةً («هذه القيمة لا تتغيّر») إلى ضمان يتحقّق منه المترجم، وبالقيم الحرفية وauto، التي تحدّد نوع قيمة مكتوبة في الشيفرة المصدرية.

أهداف التعلم

  1. استعمال الرمز العددي للمحرف في الحساب، مثلًا للحصول على قيمة رقم قُرئ بوصفه محرفًا.
  2. التنبّؤ بنتيجة تحويل ضمني بين الأعداد الصحيحة والحقيقية والقيم المنطقية، وكتابة التحويل الصريح بـ static_cast.
  3. شرح سبب رفض التهيئة بالأقواس المعقوصة للتحويلات التي تُضيّع معلومات، وما يفعله GCC في كل حالة.
  4. التصريح بـ const أو constexpr عن كل قيمة لا ينبغي أن تتغيّر، والتمييز بين الكلمتين.
  5. استنتاج نوع القيمة الحرفية (5، 5u، 5.0، 5.0f، '5'، "5") والنوع الذي يُسنده إليها auto.

النوع بوصفه تفسيرًا

قدّم درس المتغيرات والذاكرة المتغيرَ بوصفه خانة ذاكرة لها اسم ونوع وقيمة، وبيّن درسا الأعداد الصحيحة وتمثيلها وأعداد الفاصلة العائمة أن الخانة لا تحوي أعدادًا بل بتات، وأن النوع هو الذي يقول كيف تُقرأ. ويمضي هذا الدرس بهذه الفكرة إلى نتيجتها: إذا كان النوع هو قاعدة القراءة، فإن البتات نفسها تعني أشياء مختلفة بحسب النوع الذي تُقرأ به، ونقل قيمة من نوع إلى آخر، وهو ما يسمّى في C++ التحويل، هو تغيير للقاعدة. بعض التحويلات يحفظ القيمة (العدد الصحيح 7 يتحوّل إلى العدد الحقيقي 7.0 دون أن يضيع شيء)؛ وبعضها يغيّرها (العدد الحقيقي 2.7 يتحوّل إلى العدد الصحيح 2). ومن ذلك ينشأ السؤال الذي يسري في الدرس كله: في كل تحويل، هل تُحفظ القيمة، ومن يتحقّق من ذلك؟