صریح : رک و پوست کنده (در لغت نامه ها ... )،پر واضح و اشکار (لغت نامه کوچه بازای نوید در سی پلاس پلاس !)
ضمنی:implicit
التزامی ،ضمنی, مجازی, مطلق, التزامی, اشاره شده, تلویحا فهمانده شده با این اخری حال کردم چون به کار ما ربط داره !
اما کار چ کاری یقینا این کاری به کد زنی ما نداره به تفسیر کامپایلر کار داره که وقتی ما داریم مقدار به یه داده میده اون چطور تفسیرش بکنه !
حالا یه سوال بوجود میاد چون ما
casting
صریح و اشکار و خودمون انجام میدیم نگید این که میشه در بطن کار !
تفسیر های ضمنی دست کامپایر هستن و صریح دست ما :(
که در مباحث پوینتر ها ،ارایه ها ، سی استایل و استرینگ (تا اینجا static cast )و در کلاس ها و مبحث ارث بری (dynamic cast) بسیار کاربرد دارن
خب------------------
همانطور که می دانید تبدیل نوع در cpp به دو دسته کلی ضمنی و صریح تقسیم می شود. اما تبدیل نوع های صریح به چهار شکل هستند:
1. const_cast: برای تبدیل اشاره گر ثابتی که به نوعی تعریف شده به اشاره گر عادی استفاده می شود. 2. static_cast: برای تبدیل نوع هایی که راه مشخصی برای تبدیل آنها وجود دارد. این راه ممکن است توسط کامپایلر تعریف شده باشد یا در کلاس تعریف شود. برای نمونه تبدیل اشاره گر به کلاس فرزند به پدر یا بلعکس یا تبدیل int به float یا تبدیل enum به int و مواردی از این دست. توجه کنیم که در این نوع از تبدیل هیچ بررسی در زمان اجرا انجام نمی شود و تنها کامپایلر درستی آنرا بررسی می کند. پس احتمال خطا در زمان اجرا منتفی نیست.
3. dynamic_cast: همانند static_cast عمل می کند با این تفاوت که عمل تبدیل را با استفاده از RTTI (اطلاعات نوع ها در زمان اجرا) و در زمان اجرا انجام می دهد. بنابراین اگر نوعی قابل تبدیل به نوع خواسته شده نباشد، مقدار null (وقتی نوع مبدأ اشاره گر باشد) یا استثناء (در صورتی که نوع مبدأ مرجع باشد) برخواهد گشت. شاید بتوان گفت که این نوع از تبدیل نوع متداول تبدیل در زبان های متداول همچون #C است.
4. reinterpret_cast: این نوع از تبدیل بدون توجه به نوع های مبدأ و مقصد هر نوع تبدیلی را انجام می دهد. معمولاً در جایی که برنامه نویس کاملاً متوجه است که چه کار می کند، از این نوع از تبدیل استفاده می شود. مثلاً حالت هایی را در نظر بگیرید که دو کلاس هیچ ارتباطی از نظر وراثتی با هم نداشته باشند، اما نوع قرار گیری آنها در حافظه دقیقاً مثل هم باشد و برنامه نویس از این حالت با خبر باشد در این صورت می تواند از این تبدیل استفاده کند. باید توجه داشت که هیچ نوع بررسی و کنترل زمان کامپایل و اجرا روی این نوع از تبدیل انجام نمی شود. معمولاً این نوع از تبدیل ها روی platform ها مختلف کار نمی کنند.
پس تفاوت اصلی که میان دو نوع تبدیل static_cast و dynamic_cast وجود دارد، این است که در اولی تبدیل توسط کامپایلر انجام می شود و بررسی های مربوط به آن در زمان کامپایل انجام می شود و در زمان اجرا هیچ نوع بررسی انجام نمی شود. ولی در dynamic_cast عمل تبدیل نوع همانند زبان هایی مثل #C در زمان اجرا و با استفاده از RTTI انجام می شود. پس این نوع در زمان کامپایل انجام نمی شود. شاید استفاده از dynamic_cast بهتر باشد. اینطور نیست؟!
متبع سایت هم کدی
برچسب: من و سیگارم,من و سیگار,من و سیگار درد مشترکیم,من و سیاوش,من سیاه و تو سفید,من سیمین و مصطفی,من و تهران سیاوش قمیشی,رمان من وسیاوش وزندگی,رمان من و سیاوش,من و سیگار و یاد تو,
نویسنده: سینا کاشفی