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

C++-এ (int)x বদলে static_cast<int>(x) কেন ব্যবহার করা উচিত?

(int)x হলো C-স্টাইল টাইপকাস্টিং, যেখানে static_cast<int>(x) C++-এ ব্যবহার করা হয়। static_cast<>() কম্পাইল-টাইম চেকিং সুবিধা দেয়, কিন্তু C-স্টাইল কাস্টিং সেটা সাপোর্ট করে না। static_cast<>() C++ কোডে যেকোনো জায়গায় সহজে চিহ্নিত করা যায়। এবং এই C++ কাস্ট ব্যবহার করলে প্রোগ্রামারের উদ্দেশ্য আরও স্পষ্টভাবে বোঝা যায়।

C-স্টাইল কাস্টিংয়ে কখনও কখনও একটি টাইপের পয়েন্টার অন্য টাইপের ডেটাকে পয়েন্ট করতে পারে। যেমন একটি ইন্টিজার পয়েন্টার ক্যারেক্টার টাইপ ডেটাকে পয়েন্ট করতে পারে, কারণ তারা কিছুটা সাদৃশ্যপূর্ণ (ক্যারেক্টার ১ বাইট, ইন্টিজার ৪ বাইট)। C++-এ static_cast<>() C-স্টাইল কাস্টিং এর চেয়ে স্ট্রিক্ট। এটি শুধু কম্প্যাটিবল টাইপের মধ্যে কনভার্ট করে।

উদাহরণ কোড

char c = 65; // ১-বাইট ডেটা, 'A'-র ASCII
int* ptr = (int*)&c; // ৪-বাইট পয়েন্টার

যেহেতু ৪-বাইট পয়েন্টার ১-বাইট অ্যালোকেটেড মেমরিকে পয়েন্ট করছে, এটি রানটাইম এরর জেনারেট করতে পারে বা অ্যাডজাসেন্ট মেমরি ওভাররাইট করতে পারে।

C++-এ static_cast<>() কম্পাইলারকে চেক করতে দেয় যে পয়েন্টার এবং ডেটা একই টাইপের কিনা। না হলে কম্পাইলেশন টাইমে ইনকরেক্ট পয়েন্টার অ্যাসাইনমেন্ট এক্সেপশন উত্থাপন করে।

char c = 65;
int* ptr = static_cast<int*>(&c); // কম্পাইল টাইম এরর
  1. C++-এ মিডি'র থিওরেম (Midy's Theorem)

  2. সি++-এ ম্যাট্রিক্সের ডিটারমিন্যান্ট

  3. C++-এ Range Addition: অ্যারে রেঞ্জ আপডেট দিয়ে মডিফাইড অ্যারে বের করা

  4. C++-এ Line Reflection: ২D প্লেনে বিন্দুগুলোর Y-অক্ষ সমান্তরাল প্রতিফলন লাইন আছে কিনা যাচাই করা