لماذا هو type_info :: name () غير محدد؟
سؤال
أنا أدرك تمامًا أن قيمة الإرجاع std::type_info::name()
هو محدد التنفيذ.
من معيار C ++ (ISO/IEC 14882: 2003 §18.5.1.7):
عائدات: NTBs محددة التنفيذ.
سؤالي هو: لماذا؟ ألن تكون وظيفة العضو هذه أكثر فائدة إذا تملي المعيار ما يجب أن تكون قيمة الإرجاع؟
المحلول
في الأساس ، إذا قرر التنفيذ أنه لا يمكنهم أو لا يرغبون في دعم RTTI ، فيمكنهم فقط return "";
. إذا أجبرها المعيار على إعادة شيء ما ، فمن المحتمل أن يقتلوا أي قدرة على امتلاك مترجم متوافق لبيئة لا توجد فيها موارد RTTI أو يريدون تعطيلها (رقاقة ، على سبيل المثال.)
ودعونا لا ننسى أننا لا نريد إجبار مخطط ABI/الأسماء على أي مجمعات.
يتبع هذا فلسفة C ++ "أنت لا تدفع مقابل الأشياء التي لا تحتاجها."
نصائح أخرى
حيث نتحدث عن البائعين الذين يعيدون سلاسل مختلفة ، أعتقد أنه مجرد "نفعل ذلك بهذه الطريقة ، يمكنك تغيير" لا ، نحن نفعل ذلك بهذه الطريقة ، يمكنك تغيير "شيء بين بائعي المترجم. حتى لجنة المعايير لا ترغب في إزعاج فرق التحويل البرمجي ، وإنشاء معيار جديد محايد لا يستخدمه أي بائع يميل إلى العثور على شيء غير منطقي على أي حال.
لماذا لا هم كل مساحات الأسماء الواضحة :: الفصل :: وظائف وما إلى ذلك بالفعل؟ قد تكون بعض التطبيقات الحالية قد وجدت تاريخياً أنه من المريح أن تتوافق مع أسماء مشوهة مطلوبة على الارتباط ، أو كانت بجنون العظمة (أو عملاء بجنون العظمة) استخدام الذاكرة وما إلى ذلك ..