سؤال

أنا أدرك تمامًا أن قيمة الإرجاع std::type_info::name() هو محدد التنفيذ.

من معيار C ++ (ISO/IEC 14882: 2003 §18.5.1.7):

عائدات: NTBs محددة التنفيذ.

سؤالي هو: لماذا؟ ألن تكون وظيفة العضو هذه أكثر فائدة إذا تملي المعيار ما يجب أن تكون قيمة الإرجاع؟

هل كانت مفيدة؟

المحلول

في الأساس ، إذا قرر التنفيذ أنه لا يمكنهم أو لا يرغبون في دعم RTTI ، فيمكنهم فقط return "";. إذا أجبرها المعيار على إعادة شيء ما ، فمن المحتمل أن يقتلوا أي قدرة على امتلاك مترجم متوافق لبيئة لا توجد فيها موارد RTTI أو يريدون تعطيلها (رقاقة ، على سبيل المثال.)

ودعونا لا ننسى أننا لا نريد إجبار مخطط ABI/الأسماء على أي مجمعات.

يتبع هذا فلسفة C ++ "أنت لا تدفع مقابل الأشياء التي لا تحتاجها."

نصائح أخرى

حيث نتحدث عن البائعين الذين يعيدون سلاسل مختلفة ، أعتقد أنه مجرد "نفعل ذلك بهذه الطريقة ، يمكنك تغيير" لا ، نحن نفعل ذلك بهذه الطريقة ، يمكنك تغيير "شيء بين بائعي المترجم. حتى لجنة المعايير لا ترغب في إزعاج فرق التحويل البرمجي ، وإنشاء معيار جديد محايد لا يستخدمه أي بائع يميل إلى العثور على شيء غير منطقي على أي حال.

لماذا لا هم كل مساحات الأسماء الواضحة :: الفصل :: وظائف وما إلى ذلك بالفعل؟ قد تكون بعض التطبيقات الحالية قد وجدت تاريخياً أنه من المريح أن تتوافق مع أسماء مشوهة مطلوبة على الارتباط ، أو كانت بجنون العظمة (أو عملاء بجنون العظمة) استخدام الذاكرة وما إلى ذلك ..

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top