কম্পিউটার টিউটোরিয়াল

C++-এ static_cast, dynamic_cast, const_cast, reinterpret_cast কখন ব্যবহার করবেন?

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 → বর্জন করুন
  1. C++-এ রেগুলার কাস্ট vs static_cast vs dynamic_cast পার্থক্য

  2. C++-এ স্মার্ট পয়েন্টার (Smart Pointer) কী এবং কখন ব্যবহার করবেন?

  3. C/C++-এ main() ফাংশন কী রিটার্ন করা উচিত?

  4. C++-এ 'friend' কখন ব্যবহার করা উচিত?