C++-এ টাইপ কনভার্সনের জন্য একাধিক কাস্ট অপারেটর রয়েছে। প্রতিটির নির্দিষ্ট ব্যবহার ক্ষেত্র এবং সেফটি লেভেল রয়েছে।
প্রধান কাস্ট অপারেটরসমূহ
1. static_cast — সাধারণ টাইপ কনভার্সন
- নরমাল/সাধারণ টাইপ কনভার্সনের জন্য (যেমন
float→int,char→int)। - ইমপ্লিসিট টাইপ কোয়ার্সনের জন্যও দায়ী।
- কম্পাইল-টাইম চেকিং করে (আর lutego পয়েন্টার রিলেটেড কনভার্সনেও সেফটি দেয়)।
- পলিমরফিজমের জন্য উপযুক্ত নয় (বেস → ডেরাইভড ডাউনকাস্টে রানটাইম চেক নেই)।
2. dynamic_cast — পলিমরফিজম হ্যান্ডলিং
- শুধু পলিমরফিক ক্লাসে (ভirtual ফাংশন থাকলে) কাজ করে।
- বেস ক্লাস পয়েন্টার/রেফারেন্স থেকে ডেরাইভড ক্লাসে ডাউনকাস্ট করার জন্য।
- রানটাইমে টাইপ চেক করে — যদি কনভার্সন অবৈধ হয় তবে
nullptrরিটার্ন করে (পয়েন্টারের কেসে) বাstd::bad_castএক্সেপশন থ্রো করে (রেফারেন্সের কেসে)। - পারফরম্যান্স কস্ট আছে (RTTI ব্যবহার করে)।
3. Regular Cast (C-style Cast) — সবচেয়ে শক্তিশালী কিন্তু অসুরক্ষিত
- সিনট্যাক্স:
(Type)expressionবাType(expression) - এটি
const_cast,static_castএবংreinterpret_cast-র কম্বিনেশন। - dynamic_cast করে না — তাই পলিমরফিজমে অসুরক্ষিত।
- কনস্ট করতে পারে, পয়েন্টার টাইপ পরিবর্তন করতে পারে, বিট প্যাটার্ন রি-ইন্টারপ্রেট করতে পারে — সব একসাথে।
- সীমাবদ্ধতা: প্রোগ্রামারের ইচ্ছা স্পষ্ট নয়, কম্পাইলার ওয়ার্নিং দেয় না।
অন্যান্য কাস্ট
- const_cast —
constবাvolatileকোয়ালিফায়ার যোগ বা বাদ দেওয়ার জন্য। শুধুমাত্র কোয়ালিফায়ার পরিবর্তন করে, টাইপ নয়। - reinterpret_cast — সবচেয়ে নিম্নস্তরের কাস্ট। বিট প্যাটার্ন রি-ইন্টারপ্রেট করে (যেমন পয়েন্টার → ইন্টিজার, ফাংশন পয়েন্টার কনভার্সন)। অতি সতর্কতায় ব্যবহার করুন।
সামান্য নির্দেশনা
- সাধারণ কনভার্সনে: static_cast
- পলিমরফিক ডাউনকাস্টে: dynamic_cast
- কনস্ট হटাতে: const_cast
- বিট-লেভেল রি-ইন্টারপ্রিটেশনে: reinterpret_cast
- C-style cast এড়ান — এটি বাগ লুকিয়ে রাখে।