const_cast
const বা volatile কয়ালিফায়ার যোগ/বাদ দিতে। লিগ্যাসি API-এ নন-কনস্ট পয়েন্টার চাইলে, কিন্তু অবজেক্ট আসলে কনস্ট হলে UB হয়।
static_cast
সাধারণ টাইপ কনভারশন (ইমপ্লিসিট কনভারশনের এক্সপ্লিসিট রূপ): float → int, char → int, বেস ↔ ডেরাইভড পয়েন্টার (যখন নিশ্চিত হয় টাইপ), void* ↔ টাইপড পয়েন্টার। কম্পাইল-টাইম চেক।
dynamic_cast
পলিমরফিজমে ডাউনকাস্ট (বেস → ডেরাইভড) করার জন্য। রান-টাইম চেক করে (RTTI দরকার)। পয়েন্টারের জন্য নাল রিটার্ন, রেফারেন্সের জন্য bad_cast এক্সসেপশন। শুধু পলিমরফিক ক্লাসে (ভার্চুয়াল ফাংশন থাকা) কাজ করে।
reinterpret_cast
নিম্ন-স্তরের বিট প্যাটার্ন পুনর্ব্যাখ্যা: পয়েন্টার ↔ ইন্টিজার, ফাংশন পয়েন্টার কনভারশন, র ডেটা → স্ট্রাকচার। কোনো চেক নেই, অত্যন্ত বিপজ্জনক। শুধু সিস্টেম-লেভেল প্রোগ্রামিংয়ে।
সিদ্ধান্ত গাইড
- নরমাল কনভারশন →
static_cast - পলিমরফিক ডাউনকাস্ট →
dynamic_cast - constness বাদ দিতে →
const_cast - বিট-লেভেল রিইন্টারপ্রিট →
reinterpret_cast - C-স্টাইল কাস্ট
(Type)expr→ বর্জন করুন