هل يسبب const_cast من أي وقت مضى انبعاثات التعليمات الفعلي؟
-
09-09-2019 - |
سؤال
هل صحيح أن const_cast. هو مجرد وسيلة لإخبار المترجم "توقف عنان، تعامل مع هذا بموجب مؤشر غير مؤشر"؟ هل هناك أي حالات عندما const_cast. يتم ترجمتها نفسها إلى رمز الجهاز الفعلي؟
المحلول
من المتصور، يمكن أن يكون هناك هندسة حيث كان لديه مؤشر const تمثيل مختلف لآخر غير ثابت، وفي هذه الحالة سيتعين على المحول البرمجي أن ينبعث من بعض التعليمات البرمجية. أنا لست على علم بأي هندسة من هذا القبيل.
نصائح أخرى
لا، فإنه مجرد إزالة سمة CONST في تجميع الوقت.
const_cast فقط يلقي بعيدا استنكر السمة ولا شيء أكثر.
const
لا يغير تمثيل نوع، على وجه الخصوص، تمثيل T*
هو بالضبط نفس T const*
.
انصح:
int i,
* const cpi = &i,
* const * pcpi = &cpi;
int const * const * pcpci = pcpi; // cpi is now int const*
تمثيل cpi
في نفس الوقت يمثل int*
و int const*
عبر *pcpci
.
لا توجد وسيلة لتمثيل cpi
لتغيير متى pcpci
يتم تهيئة.
بالطبع، إذا كانت كائنات المؤشر لها بت غير مهم، يمكن للمترجم أن يقلبها بشكل عشوائي؛ خاصه، const_cast
يمكن قلب البتات غير المهمة من المؤشر، ولكن يمكن أيضا تحويل ضمني أيضا. لا أعتقد أن هذه الحالة موجودة في العالم الحقيقي.
ينطبق الشيء نفسه عندما ينتج عنه أنماط بت مختلفة في نفس قيمة العنوان (قاعدة + إزاحة عند الإزاحة كبيرة بما فيه الكفاية).