(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); // কম্পাইল টাইম এরর