এখানে আমরা static_cast<> এবং সাধারণ C-স্টাইল কাস্টের পার্থক্য দেখব।
সাধারণ কাস্ট যেমন (int)x হল C-স্টাইল টাইপকাস্টিং যেখানে static_cast
static_cast<>() কম্পাইল টাইম চেকিং সুবিধা দেয়, কিন্তু C-স্টাইল কাস্টিং সেটি সাপোর্ট করে না। static_cast<>() কোডে যেকোনো জায়গা থেকে স্পট করা যায়। এবং এই C++ কাস্ট ব্যবহার করে উদ্দেশ্য অনেক ভালোভাবে প্রকাশ করা যায়।
C-স্টাইল কাস্টে কখনও কখনও আমরা কোনো টাইপ পয়েন্টারকে অন্য টাইপ ডেটার দিকে পয়েন্ট করাতে পারি।
যেমন একটি ইন্টিজার পয়েন্টার ক্যারেক্টার টাইপ ডেটার দিকে পয়েন্ট করতে পারে, কারণ তারা খুব একই, শুধু পার্থক্য হলো ক্যারেক্টার ১-বাইট, ইন্টিজার ৪-বাইট। C++-এ static_cast<>() C-স্টাইল কাস্টিং থেকে কঠোর। এটি শুধু কম্প্যাটিবল টাইপের মধ্যে কনভার্ট করতে দেয়।
উদাহরণ
char c = 65; // ১-বাইট ডেটা। 'A'-র ASCII int* ptr = (int*)&c; // ৪-বাইট
যেহেতু ৪-বাইট পয়েন্টার, ১-বাইট alokেট করা মেমরির দিকে পয়েন্ট করছে, এটি রানটাইম এরর জেনারেট করতে পারে বা অ্যাডজাসেন্ট মেমরি ওভাররাইট করতে পারে।
C++-এ static_cast<>() কম্পাইলারকে চেক করতে দেবে পয়েন্টার এবং ডেটা একই টাইপের কিনা। যদি না হয় তবে কম্পাইলেশন время incorrect pointer assignment এক্সেপশন উত্থাপন করবে।
char c = 65; // ১-বাইট ডেটা। 'A'-র ASCII int* ptr = static_cast<int*>(&c);
এটি কম্পাইল টাইম এরর জেনারেট করবে।