static_cast
সাধারণ টাইপ কনভারশনের জন্য। ইমপ্লিসিট কনভারশন যা বৈধ (যেমন float থেকে int, char থেকে int), সেগুলো এক্সপ্লিসিটলি করার জন্য। কম্পাইল-টাইম চেক করে।
dynamic_cast
পলিমরফিজম হ্যান্ডল করার জন্য। বেস ক্লাস পয়েন্টার/রেফারেন্স থেকে ডেরাইভড ক্লাসে ডাউনকাস্ট (downcast) করার সময়। রান-টাইম চেক করে (RTTI আপেক্ষিক)। শুধু পলিমরফিক ক্লাসে (ভার্চুয়াল ফাংশন থাকা ক্লাসে) কাজ করে।
রেগুলার কাস্ট (C-স্টাইল কাস্ট)
সবচেয়ে শক্তিশালী কিন্তু অনসেফ। const_cast + static_cast + reinterpret_cast-র কম্বিনেশন। dynamic_cast করছে না। এড়ানো উচিত।
অন্যান্য কাস্ট
- const_cast:
constযোগ/বাদ দেওয়া (সুবিধাজনক কিন্তু সতর্কতা বাঞ্ছনীয়)। - reinterpret_cast: বিট প্যাটার্ন পুনর্ব্যাখ্যা, নিম্ন-স্তরের ম্যানিপুলেশন (যেমন পয়েন্টার থেকে ইন্টিজার, ফাংশন পয়েন্টার কনভারশন)। অত্যন্ত বিপজ্জনক।
সারাংশ: প্রাথমিকতা: static_cast > dynamic_cast (যদি পলিমরফিজম) > const_cast > reinterpret_cast। C-স্টাইল কাস্ট ব্যবহার করবেন না।