هل هناك أي أدوات C ++ تكتشف سوء استخدام static_cast و dynamic_cast و reinterpret_cast؟

StackOverflow https://stackoverflow.com/questions/2465964

سؤال

تصف الإجابات على السؤال التالي الاستخدام الموصى به لـ static_cast, dynamic_cast, ، و reinterpret_cast في C ++:

متى يجب استخدام static_cast و dynamic_cast و const_cast و reinterpret_cast؟

هل تعرف أي أدوات يمكن استخدامها للكشف عن سوء استخدام هذه الأنواع من الممثلين؟ هل سيفعل أداة التحليل الثابت مثل PC-Lint أو تحليل ثابتة التغطية هذا؟

كانت الحالة المعينة التي دفعت هذا السؤال هي الاستخدام غير المناسب لـ static_cast لتسجيل مؤشر ، والذي لا يحذره المترجم. أرغب في اكتشاف هذه الحالة باستخدام أداة ، ولا أفترض أن المطورين لن يرتكبوا هذا الخطأ أبدًا.

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

المحلول

بالنظر إلى أنه لا توجد طريقة موثوقة لمعرفة نوع المؤشر الذي يشير إليه المؤشر في وقت الترجمة ، فهذه مشكلة صعبة للغاية في وقت الترجمة.

تتمثل أبسط طريقة في القيام بالمصيد في وقت التشغيل ، باستخدام الماكرو "Safe_cast" الذي يجمع إلى Dynamic_cast مع تأكيد في التصحيح ، و static_cast في الإصدار.

الآن ، أثناء تصحيح الأخطاء ، إذا كان فريق الممثلين غير مناسبون ، فسوف يعود فريق العمل الديناميكي ، ويؤكد. لا يوجد أيضا النفقات العامة أثناء الإصدار.

نصائح أخرى

Visual Studio لديه تحذيرات لبعض هذه. C4946 ، على سبيل المثال. في الغالب يتم إيقافها بشكل افتراضي.

http://msdn.microsoft.com/en-us/library/23k5d385.aspx

يوفر Boost وظائف polymorphic_pointer_downcast () و polymorphic_downcast () ، والتي تعمل مثل static_cast ولكنها ستؤكد (عادةً في بناء التصحيح) في حالة فشل Dynamic_cast المكافئ.

يرى http://www.boost.org/doc/libs/1_61_0/libs/conversion/cast.htm للتفاصيل.

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