এখানে আমরা দেখব স্ট্যাটিক_কাস্ট<> এবং সাধারণ সি স্টাইলের কাস্টের মধ্যে পার্থক্য কী।
সাধারণ কাস্ট যেমন (int)x হল C স্টাইলের টাইপকাস্টিং যেখানে static_cast
এই static_cast<>() কম্পাইল টাইম চেকিং সুবিধা দেয়, কিন্তু C শৈলী কাস্টিং এটি সমর্থন করে না। এই static_cast<>() একটি C++ কোডের ভিতরে যে কোন জায়গায় দেখা যাবে। এবং এই C++ কাস্ট ব্যবহার করে ইনটেনশন অনেক ভালোভাবে জানানো হয়।
কাস্টের মতো সি-তে মাঝে মাঝে আমরা কিছু টাইপ পয়েন্টার কাস্ট করতে পারি অন্য টাইপ ডেটা পয়েন্ট করার জন্য।
যেমন একটি পূর্ণসংখ্যা পয়েন্টার ক্যারেক্টার টাইপ ডেটাকে নির্দেশ করতে পারে, কারণ সেগুলি বেশ একই রকম, শুধুমাত্র পার্থক্য হল অক্ষরের 1-বাইট আছে, পূর্ণসংখ্যার 4-বাইট রয়েছে। C++ তে static_cast<>() কাস্টিং-এর মতো C-এর চেয়ে বেশি কঠোর। এটি শুধুমাত্র সামঞ্জস্যপূর্ণ প্রকারের মধ্যে রূপান্তর করে৷
উদাহরণ
char c = 65; //1-byte data. ASCII of ‘A’ int *ptr = (int*)&c; //4-byte
যেহেতু একটি 4-বাইট পয়েন্টারে, এটি বরাদ্দ করা মেমরির 1-বাইটের দিকে নির্দেশ করছে, এটি রানটাইম ত্রুটি তৈরি করতে পারে বা কিছু সংলগ্ন মেমরি ওভাররাইট করবে৷
C++ এ static_cast<>() কম্পাইলারকে পয়েন্টার এবং ডেটা একই ধরনের কিনা তা পরীক্ষা করার অনুমতি দেবে। যদি না হয় তবে এটি সংকলনের সময় ভুল পয়েন্টার অ্যাসাইনমেন্ট ব্যতিক্রম উত্থাপন করবে।
char c = 65; //1-byte data. ASCII of ‘A’ int *ptr = static_cast<int>(&c);এর ASCII
এটি কম্পাইল টাইম এরর তৈরি করবে।