سؤال

هل صحيح أن 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 يمكن قلب البتات غير المهمة من المؤشر، ولكن يمكن أيضا تحويل ضمني أيضا. لا أعتقد أن هذه الحالة موجودة في العالم الحقيقي.

ينطبق الشيء نفسه عندما ينتج عنه أنماط بت مختلفة في نفس قيمة العنوان (قاعدة + إزاحة عند الإزاحة كبيرة بما فيه الكفاية).

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