কঠোর অর্থে, এটি সংজ্ঞায়িত আচরণ নয়, তবে বাস্তবায়ন-সংজ্ঞায়িত। সুতরাং, যদিও অজ্ঞ যদি অ মূলধারার আর্কিটেকচারের সমর্থন করার জন্য পরিকল্পনা, আপনি করতে পারেন সম্ভবত এটা করতে।
ইন্টারজয়ের দেওয়া মানক উক্তিটি একটি ভাল, এটি ইউবি নির্দেশ করে, তবে এটি আমার মতে দ্বিতীয়টি সেরা হিট, যেহেতু এটি পয়েন্টার-পয়েন্টার গাণিতিক নিয়ে কাজ করে (মজাদারভাবে, একটি স্পষ্টতই ইউবি, অন্যটি হয় না)। প্রশ্নটিতে অপারেশন নিয়ে সরাসরি কাজ করার একটি অনুচ্ছেদ রয়েছে:
[expr.post.incr] / [expr.pre.incr]
অপারেন্ডটি হতে হবে [...] বা সম্পূর্ণ সংজ্ঞায়িত অবজেক্ট টাইপের পয়েন্টার।
ওহ, একটি মুহুর্ত অপেক্ষা করুন, একটি সম্পূর্ণ সংজ্ঞায়িত অবজেক্টের ধরণ? এখানেই শেষ? আমি বলতে চাইছি, সত্যিই, টাইপ করুন ? সুতরাং আপনি কোন জিনিস প্রয়োজন হয় না?
এটি পড়ার জন্য বেশ খানিকটা সময় লাগে আসলে একটি ইঙ্গিতটি খুঁজে পাওয়া যায় যে সেখানকার কিছু সম্ভবত খুব ভাল সংজ্ঞায়িত নাও হতে পারে। কারণ এখনও অবধি, এটি এমনভাবে পড়ে যে আপনি একে একে একে পুরোপুরি অনুমতি দিচ্ছেন, কোনও বিধিনিষেধ নেই।
[basic.compound] 3
একজনের কী ধরণের পয়েন্টার থাকতে পারে সে সম্পর্কে একটি বিবৃতি দেয় এবং অন্য তিনটির মধ্যে কেউ না হওয়ায় আপনার ক্রিয়াকলাপের ফলাফলটি স্পষ্টভাবে ৩.৪ এর আওতায় পড়বে: অবৈধ পয়েন্টার ।
তবে এটি এটি বলে না যে আপনাকে একটি অবৈধ পয়েন্টার রাখার অনুমতি নেই। বিপরীতে, এটি কিছু খুব সাধারণ, সাধারণ অবস্থার তালিকা (যেমন সঞ্চয়স্থানের সময়সীমা) যেখানে পয়েন্টারগুলি নিয়মিতভাবে অবৈধ হয়ে যায়। সুতরাং এটি সম্ভবত একটি অনুমোদিত জিনিস। এবং প্রকৃতপক্ষে:
[বেসেল.এসসিসি] 4
একটি অবৈধ পয়েন্টার মানের মাধ্যমে ইন্ডিরেশন এবং একটি অবৈধ পয়েন্টার মানকে একটি নির্ধারণের ফাংশনে পাস করার অপরিবর্তিত আচরণ রয়েছে। একটি অবৈধ পয়েন্টার মানের অন্য কোনও ব্যবহারের প্রয়োগ-সংজ্ঞায়িত আচরণ রয়েছে।
আমরা সেখানে একটি "অন্য কোনও" করছি, সুতরাং এটি সংজ্ঞায়িত আচরণ নয়, তবে বাস্তবায়ন-সংজ্ঞায়িত, সুতরাং সাধারণত অনুমোদিত (যেমন বাস্তবায়ন স্পষ্টভাবে কিছু আলাদাভাবে না বলে)।
দুর্ভাগ্যক্রমে, এটি গল্পের শেষ নয়। যদিও নেট ফলাফলটি এখান থেকে আর কোনও পরিবর্তন হয় না, এটি আরও বিভ্রান্তিকর হয়ে ওঠে, আপনি যতক্ষণ "পয়েন্টার" সন্ধান করেন:
[মৌলিক.কম্পাউন্ড]
কোনও অবজেক্ট পয়েন্টার টাইপের একটি বৈধ মান মেমরির কোনও বাইটের ঠিকানা বা নাল পয়েন্টারটিকে প্রতিনিধিত্ব করে। টি টাইপের কোনও বস্তু যদি কোনও ঠিকানার এ অবস্থিত হয় তবে [...] মানটি কীভাবে প্রাপ্ত হয়েছিল তা বিবেচনা না করেই সেই অবজেক্টের দিকে নির্দেশ করতে বলা হয় ।
[দ্রষ্টব্য: উদাহরণস্বরূপ, অ্যারের শেষের পূর্বের ঠিকানাটি ঠিকানায় অবস্থিত অ্যারের উপাদান ধরণের কোনও সম্পর্কযুক্ত অবজেক্টের দিকে নির্দেশ করে বিবেচনা করা হবে। [...]]।
হিসাবে পড়ুন: ঠিক আছে, কে যত্নশীল! স্মৃতিতে কোথাও পয়েন্টার পয়েন্ট করা পর্যন্ত আমি ভাল আছি?
[বেসরাল.এসটিসি.ডিনামিক.স্যাফটি] একটি পয়েন্টার মান হ'ল নিরাপদে উত্পন্ন পয়েন্টার [ব্লাহ ব্লাহ]
হিসাবে পড়ুন: ঠিক আছে, নিরাপদে প্রাপ্ত, যাই হোক না কেন। এটি কী তা ব্যাখ্যা করে না, বা এটি বলে না যে আসলে আমার এটির প্রয়োজন ছিল। নিরাপদে-ডিরাইভড-নরক। স্পষ্টতই আমি এখনও নিরাপদ থেকে প্রাপ্ত-পয়েন্টারগুলি ঠিক ঠিক রাখতে পারি। আমি অনুমান করছি যে তাদেরকে ডিফারেন্স করা সম্ভবত এতো ভাল ধারণা হবে না তবে এগুলি রাখার পক্ষে এটি পুরোপুরি অনুমোদিত। এটি অন্যথায় বলে না।
একটি বাস্তবায়নে শিথিল পয়েন্টার সুরক্ষা থাকতে পারে, সেই ক্ষেত্রে কোনও পয়েন্টার মানের বৈধতা এটি নিরাপদে প্রাপ্ত পয়েন্টার মান কিনা তা নির্ভর করে না।
ওহ, সুতরাং এটি কিছু মনে করতে পারে না, আমি কি ভেবেছিলাম। তবে অপেক্ষা করুন ... "না"? তার মানে, এটিও হতে পারে । আমি কিভাবে জানবো?
বিকল্পভাবে, একটি বাস্তবায়নের কঠোর পয়েন্টার সুরক্ষা থাকতে পারে, সেই ক্ষেত্রে রেফারেন্সযুক্ত সম্পূর্ণ অবজেক্টটি গতিশীল স্টোরেজ সময়কালের না হয় এবং পূর্বে পৌঁছনীয় হিসাবে ঘোষণা না করা হলে নিরাপদে প্রাপ্ত পয়েন্টার মান নয় এমন পয়েন্টার মানটি একটি অবৈধ পয়েন্টার মান is
অপেক্ষা করুন, তাহলে কি এমনও সম্ভব যে আমাকে declare_reachable()
প্রতিটি পয়েন্টারে কল করতে হবে ? আমি কিভাবে জানবো?
এখন, আপনি রূপান্তর করতে পারেন intptr_t
যা নিরাপদে নির্ধারিত পয়েন্টারটির পূর্ণসংখ্যা উপস্থাপনা করে , যা সংজ্ঞায়িত is যার জন্য, অবশ্যই, পূর্ণসংখ্যা হিসাবে, এটি পুরোপুরি বৈধ এবং যথাসম্ভব যথাযথভাবে এটি বাড়ানোর জন্য যেমন আপনি চান to
এবং হ্যাঁ, আপনি intptr_t
পিছনে কোনও পয়েন্টারে রূপান্তর করতে পারেন , এটিও ভাল-সংজ্ঞায়িত। কেবলমাত্র, আসল মান হিসাবে নয়, এটির আর গ্যারান্টি নেই যে আপনার কাছে নিরাপদে উত্পন্ন পয়েন্টার রয়েছে (স্পষ্টতই)। তবুও, সর্বোপরি, স্ট্যান্ডার্ডের চিঠিতে, বাস্তবায়ন-সংজ্ঞায়িত হওয়ার সময়, এটি করা একটি 100% বৈধ কাজ:
[expr.reinterpret.cast] 5
ইন্টিগ্রাল টাইপ বা গণনা টাইপের একটি মান স্পষ্টভাবে একটি পয়েন্টারে রূপান্তরিত হতে পারে। একটি পয়েন্টার পর্যাপ্ত আকারের পূর্ণসংখ্যায় রূপান্তরিত [...] এবং একই পয়েন্টার প্রকারে ফিরে যায় [...] মূল মান; পয়েন্টার এবং পূর্ণসংখ্যার মধ্যে ম্যাপিংগুলি অন্যথায় বাস্তবায়ন-সংজ্ঞায়িত।
ধরা
পয়েন্টারগুলি কেবলমাত্র সাধারণ পূর্ণসংখ্যা, কেবলমাত্র সেগুলি পয়েন্টার হিসাবে ব্যবহার করার জন্য ঘটে। ওহ যদি সত্যিই হত!
দুর্ভাগ্যক্রমে, এমন আর্কিটেকচার রয়েছে যেখানে এটি একেবারেই সত্য নয় এবং কেবল একটি অবৈধ পয়েন্টার তৈরি করা (এটি ডিপ্রিফারেন্স না করা, এটি কেবলমাত্র পয়েন্টার রেজিস্টারে রাখা) একটি ফাঁদ সৃষ্টি করবে।
সুতরাং এটি "বাস্তবায়ন সংজ্ঞায়িত" এর ভিত্তি। যে, এবং সত্য একটি পয়েন্টার বৃদ্ধিশীল যে যখনই আপনি চান, আপনি দয়া করে পারা অবশ্যই কারণ ওভারফ্লো, যা মান সাথে মোকাবিলা করতে চায় না করে। অ্যাপ্লিকেশন ঠিকানার স্থানের সমাপ্তি ওভারফ্লোয়ের অবস্থানের সাথে একত্রিত নাও হতে পারে এবং নির্দিষ্ট আর্কিটেকচারের পয়েন্টারগুলির জন্য ওভারফ্লো জাতীয় কোনও জিনিস আছে কিনা তা আপনি জানেন না। সব মিলিয়ে এটি একটি দুঃস্বপ্নের জগাখিচুড়ি সম্ভাব্য সুবিধার কোনও সম্পর্কের ক্ষেত্রে নয়।
অন্যদিকে এক অতীতের-অবজেক্ট শর্তের সাথে ডিল করা সহজ: বাস্তবায়ন অবশ্যই নিশ্চিত করতে হবে যে কোনও বস্তু কখনও বরাদ্দ করা হয়নি যাতে ঠিকানার জায়গার শেষ বাইটটি দখল করা হয়। সুতরাং এটি গ্যারান্টি হিসাবে দরকারী এবং তুচ্ছ হিসাবে এটি সংজ্ঞায়িত।