সি তে, void *
অন্য কোনও পয়েন্টার ধরণের কাছে কাস্ট করার দরকার নেই , এটি সর্বদা নিরাপদে প্রচার করা হয়। যাইহোক, সি ++ এ, এটি ক্ষেত্রে নয়। যেমন,
int *a = malloc(sizeof(int));
সি তে কাজ করে তবে সি ++ তে নয়। (দ্রষ্টব্য: আমি জানি যে আপনি malloc
সি ++ এ ব্যবহার করবেন না , বা সেই বিষয়ে ব্যবহার করা উচিত নয় new
এবং পরিবর্তে স্মার্ট পয়েন্টার এবং / বা এসটিএলকে পছন্দ করা উচিত; এটি নিখুঁতভাবে কৌতূহলের বাইরে জিজ্ঞাসা করা হয়েছিল) কেন সি ++ স্ট্যান্ডার্ড এই নিষ্ক্রিয় অভিনেতাকে অনুমতি দেয় না, সি স্ট্যান্ডার্ড যখন না?
sizeof(*a)
পরিবর্তে ব্যবহার করে ঠিক করা হয়েছে।
malloc
কোনও পয়েন্টার ফিরিয়ে দিতে পারে না। new
সি ++ বরাদ্দ করা টাইপটিতে একটি পয়েন্টার ফেরত দেয়, তাই সঠিকভাবে লিখিত সি ++ কোডে কখনও void *
কাস্ট করার কোনও দরকার নেই ।
void
, সি করেনি না । যখন সেই কীওয়ার্ড / ধারণাটি সিতে যুক্ত হয়েছিল, তারা এটি সি এর প্রয়োজন অনুসারে পরিবর্তন করে। পয়েন্টারের ধরণগুলি একেবারে চেক করা শুরু হওয়ার কিছুক্ষণ পরেই এটি হয়েছিল । আপনি অনলাইনে কেঅ্যান্ডআর সি বর্ণনার পামফলেট বা ওয়েট গ্রুপের সি প্রাইমারের মতো সি প্রোগ্রামিং পাঠ্যের একটি ভিনটেজ অনুলিপি খুঁজে পেতে পারেন কিনা তা দেখুন । এএনএসআই সি পূর্ণ, সি -++ দ্বারা অনুপ্রাণিত বা অনুপ্রাণিত বৈশিষ্ট্যগুলির ছিল এবং কেএন্ডআর সি ছিল আরও সহজ। সুতরাং এটি আরও সঠিক যে সি ++ সি প্রসারিত সি এর সময়ে বিদ্যমান ছিল এবং আপনি যে সি জানেন তা সি ++ থেকে সরে গেছে।
long *a = malloc(sizeof(int));
উফফফফ, কেউ কেবল একটি প্রকার পরিবর্তন করতে ভুলে গেছে!