কম্পিউটার

স্ট্যাটিক_কাস্ট<> এবং সি স্টাইল কাস্টিংয়ের মধ্যে পার্থক্য কী?


এখানে আমরা দেখব স্ট্যাটিক_কাস্ট<> এবং সাধারণ সি স্টাইলের কাস্টের মধ্যে পার্থক্য কী।

সাধারণ কাস্ট যেমন (int)x হল C স্টাইলের টাইপকাস্টিং যেখানে static_cast(x) C++ এ ব্যবহৃত হয়।

এই 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

এটি কম্পাইল টাইম এরর তৈরি করবে।


  1. DirectX 11 এবং DirectX 12-এর মধ্যে পার্থক্য কী?

  2. C# এ int এবং Int32 এর মধ্যে পার্থক্য কী?

  3. C# এ তালিকা এবং অভিধানের মধ্যে পার্থক্য কী?

  4. C# এ টাইপ রূপান্তর এবং টাইপ কাস্টিংয়ের মধ্যে পার্থক্য কী?