কীভাবে বাতিল * a = এবং আইনী?


88

নিম্নলিখিত সি ++ কোড বিবেচনা করুন:

void* a = &a;

সংকলক কেন অঘোষিত শনাক্তকারী ব্যবহারের জন্য অভিযোগ করে না?

এছাড়াও, সংকলকটি পরিবর্তনশীলটিকে কী বলে মনে করে a? এটি একটি শূন্য বস্তুর পয়েন্টার বা এটি কোনও পয়েন্টারটির void*পয়েন্টার?




15
আপনি কেন এটি করতে চাইছেন তা উল্লেখ করা উচিত - স্ট্যাকের শীর্ষে একটি পয়েন্টার পেতে (যেখান থেকে আপনি সমস্ত ধরণের জিনিস নিয়ে স্নিগ্ধ করতে পারেন)।
অরেঞ্জডগ

উত্তর:


95

সি ++ এ ভেরিয়েবল ঘোষণার সুযোগটি বিস্ময়কর হতে পারে:

void* a =               &a;
         ^~~~~~~~~~~~~~~~~
          a declared as `void*` from here on

অতএব, &aহয় void**কিন্তু কোনো পয়েন্টার টাইপ যেহেতু পরোক্ষভাবে থেকে পরিবর্তনীয় হয় void*...


আমি কীভাবে এটিতে একটি দরকারী অবজেক্ট বরাদ্দ করব?
ব্যবহারকারী2681063

22
@ ইউজার 2681063 a = &userfulObject?
নিকস সি

4
@ মার্কগার্সিয়া: দ্রষ্টব্য যে void *a = a;স্থানীয়ভাবে ঘোষণা করা হলে এটি ইউবি হবে, অন্যথায় নাম স্পেসে এটি ঠিক আছে।
নওয়াজ

4
@ থিডোরোস চ্যাটিজিগিয়ানানাকিস: আমি বিশ্বাস করব এটি হ্যাঁ।
ম্যাথিউ এম।

4
একটি স্পষ্ট উদ্ধৃতি এখানে সত্যিই দুর্দান্ত হবে।
বেনিয়ামিন গ্রুইনবাউম

30

এটা সমান

void* a;
a = &a;

সুতরাং, aঘোষণা করা হয়েছে। সুতরাং লিখিত aঠিকানা পায় । সুতরাং এটি একটি অকার্যকর পয়েন্টার একটি পয়েন্টার। (আপনি এখনও কোনও বস্তুর সংজ্ঞা দেননি।)aa


9
প্রযুক্তিগতভাবে, আপনি একটি বস্তুর সংজ্ঞা দিয়েছেন। aনিজেই একটি বস্তু। (সমস্ত অবজেক্টের সি
এমএসএল্টার

4
@ এসএমএলটাররা আপনি যে 'অবজেক্ট' এর কথা বলছেন? : ডি
গুসডর

4
@ গুডোর আমরা কেবল অনুমান করতে পারি যে ঘটনা দিগন্তের শূন্যতার বাইরে কী রয়েছে।
কোল জনসন

তাদের আলাদাভাবে বলা হয়, তবে এই ক্ষেত্রে "প্রভাব" একই রকম
স্ট্যাসিক

এগুলি সাধারণভাবে সমান নয়, তবে এই দৃশ্যে তারা।
22-25

7

ইন void* a, aকোনও voidধরণের নয় বরং "যে কোনও" টাইপের (বিশেষ ক্ষেত্রে) নির্দেশক হিসাবে ঘোষণা করা হয় । একটি ঠিকানা (স্মৃতিতে অবস্থান) নির্ধারিত হয়a , অবশ্যই অন্য যে কোনও ভেরিয়েবল ঘোষিত হচ্ছে।

এর পরে, &aভেরিয়েবলটি আরম্ভ করার জন্য এক্সপ্রেশনটি মূল্যায়ন করা হয় (এছাড়াও a, তবে এটি প্রাসঙ্গিক নয়) সবেমাত্র ঘোষিত হয়েছে। প্রকারটি &aহ'ল "যে কোনও ধরণের পয়েন্টার থেকে পয়েন্টার", যা "প্রকারের সাথে কোনও প্রকারের" একটি বিশেষ ক্ষেত্রে, প্রকারের সাথে পুরোপুরি সামঞ্জস্যপূর্ণ a। কিন্তু, কোনও সংকলক বার্তা নেই।

দুর্নীতি: void*আপনি শক্তিশালী টাইপ চেক করতে চান না ব্যবহার করবেন না । যে কোনও কিছুতে এটি রূপান্তরিত হতে পারে। বিপরীত দিকের ঠিক বিপরীত, void*নিজে ব্যতীত (এটি একটি অপ্রয়োজনীয় ব্যতিক্রম হবে যে কোনও ধরণের নিজের সাথে বেমানান ছিল)।

এছাড়াও, আফার এটি সত্যই সি থেকে আসে from

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.