এটি কি নাল পয়েন্টারে শূন্য যুক্ত করার অনুমতি রয়েছে?


9

আমি জানি যে পয়েন্টার গাণিতিক নাল পয়েন্টারগুলির জন্য অনুমোদিত নয়। তবে ভাবুন আমার এরকম কিছু রয়েছে:

class MyArray {
  int *arrayBegin;  // pointer to the first array item, NULL for an empty array
  unsigned arraySize;   // size of the array, zero for an empty array
public:
  int *begin() const { return arrayBegin; }
  int *end() const { return arrayBegin + arraySize; }  // possible? (arrayBegin may be null)

উপরোক্ত end()বাস্তবায়ন কি সম্ভব (অনুমোদিত) ? বা এটি থাকা প্রয়োজন:

  int *end() const { return (arraySize == 0) ? nullptr : (arrayBegin + arraySize); }

নালপ্টারের সাথে পয়েন্টার গাণিতিকটি এড়াতে কারণ arrayBeginখালি অ্যারের জন্য নাল (যদিও arraySizeএই ক্ষেত্রে শূন্য থাকা সত্ত্বেও )?

আমি জানি যে এটির int *end;পরিবর্তে সঞ্চয় করা সম্ভব unsigned size;এবং আকার হিসাবে গণনা করা যায় end-begin- তবে একই সমস্যাটি আসে: এটি কি গণনা করার অনুমতি দেওয়া হয় nullptr - nullptr?

আমি বিশেষভাবে স্ট্যান্ডার্ড রেফারেন্স প্রশংসা করব।

উত্তর:


8

হ্যাঁ, আপনি নাল পয়েন্টারে শূন্য যুক্ত করতে পারেন এবং অন্য থেকে একটি নাল পয়েন্টার বিয়োগ করতে পারেন। অ্যাডিটিভ অপারেটরদের উদ্ধৃতি :

যখন Jঅবিচ্ছেদ্য টাইপযুক্ত একটি অভিব্যক্তি Pপয়েন্টার ধরণের এক্সপ্রেশন থেকে যুক্ত বা বিয়োগ করা হয় , ফলাফলের ধরণ থাকে P

  • যদি Pকোনও নাল পয়েন্টার মানকে Jমূল্যায়ণ করে এবং 0 এ মূল্যায়ন করে, ফলাফলটি নাল পয়েন্টার মান।

8
"8.7 7" কি? আপনি যদি সি ++ স্ট্যান্ডার্ডটি উল্লেখ করেন তবে দয়া করে কোনটি নির্দিষ্ট করুন। সাধারণত, বন্ধনীগুলিতে বিভাগের "নামগুলি" ব্যবহার করা ভাল, যেহেতু বিভাগ / অধ্যায় / অনুচ্ছেদ সংখ্যাগুলি প্রতিটি স্ট্যান্ডার্ড সংস্করণের সাথে সাধারণত পরিবর্তিত হয়। বর্তমান খসড়ায়, প্রাসঙ্গিক বিভাগটি ৪.১ এবং ৫.১ অনুচ্ছেদে [এক্সপ্রেস অ্যাডডি] রয়েছে ।
ড্যানিয়েল ল্যাঙ্গার
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.