এটি একটি মজার আলোচনা হয়। স্পষ্টতই রেফারেসের অ্যারেগুলি সম্পূর্ণ অবৈধ, তবে 'তারা বস্তু নয়' বা 'তাদের কোনও আকার নেই' বলার কারণ এতটা সহজ হওয়ার কারণটি IMHO নয়। আমি উল্লেখ করতে পারি যে অ্যারেগুলি সি / সি ++ তে পুরোপুরি অবজেক্টস নয় - যদি আপনি এটি আপত্তি করেন তবে কিছু শ্রেণিবদ্ধ টেমপ্লেট ক্লাসকে 'শ্রেণি' টেমপ্লেট প্যারামিটার হিসাবে অ্যারে ব্যবহার করে চেষ্টা করুন এবং দেখুন কী ঘটে। আপনি তাদের ফিরিয়ে দিতে পারবেন না, তাদের বরাদ্দ করতে পারবেন, পরামিতি হিসাবে তাদের পাস করুন। (একটি অ্যারে পরমকে পয়েন্টার হিসাবে বিবেচনা করা হয়)। তবে অ্যারেগুলি অ্যারে করা বৈধ। রেফারেন্সগুলির একটি আকার থাকে যা সংকলকটি গণনা করতে পারে এবং অবশ্যই তা গণনা করতে পারে - আপনি কোনও রেফারেন্স আকার () করতে পারবেন না, তবে আপনি রেফারেন্স ব্যতীত কোনও কাঠামো তৈরি করতে পারেন। রেফারেন্সগুলি কার্যকর করে এমন সমস্ত পয়েন্টার ধারণ করার জন্য এটির পর্যাপ্ত পরিমাণ থাকবে। আপনি করতে পারেন '
struct mys {
int & a;
int & b;
int & c;
};
...
int ivar1, ivar2, arr[200];
mys my_refs = { ivar1, ivar2, arr[12] };
my_refs.a += 3 ; // add 3 to ivar1
বাস্তবে আপনি কাঠামো সংজ্ঞাতে এই লাইনটি যুক্ত করতে পারেন
struct mys {
...
int & operator[]( int i ) { return i==0?a : i==1? b : c; }
};
... এবং এখন আমার কাছে এমন কিছু আছে যা দেখতে প্রচুর পরিমাণে রেফারির মতো লাগে:
int ivar1, ivar2, arr[200];
mys my_refs = { ivar1, ivar2, arr[12] };
my_refs[1] = my_refs[2] ; // copy arr[12] to ivar2
&my_refs[0]; // gives &my_refs.a == &ivar1
এখন, এটি আসল অ্যারে নয়, এটি অপারেটর ওভারলোড; উদাহরণস্বরূপ, অ্যারেগুলি সাধারণত মাপের (আরআর) / সাইজফ (আরআর [0]) এর মতো কাজগুলি করে না। তবে এটি পুরোপুরি আইনী সি ++ সহ আমি রেফারেন্সগুলির একটি অ্যারেটি করতে চাই ঠিক তা করে। (ক) ব্যতীত 3 বা 4 টিরও বেশি উপাদানের জন্য সেট আপ করতে ব্যথা হচ্ছে এবং (খ) এটি গুচ্ছ ব্যবহার করে একটি গণনা করছে?: যা সূচক ব্যবহার করে করা যেতে পারে (সাধারণ সি-পয়েন্টার-গণনা-শব্দার্থ সূচকগুলি দিয়ে নয়) , তবে তবুও সূচীকরণ)। আমি খুব সীমিত 'রেফারেন্সের অ্যারে' টাইপ দেখতে চাই যা আসলে এটি করতে পারে। অর্থাত্ রেফারেন্সের অ্যারেগুলিকে রেফারেন্সের জিনিসগুলির সাধারণ অ্যারে হিসাবে বিবেচনা করা হবে না, বরং এটি একটি নতুন 'অ্যারে-অফ-রেফারেন্স' হবে টেমপ্লেট দিয়ে তৈরি)।
এটি সম্ভবত কাজ করবে, যদি আপনি এই জাতীয় কদর্যতা মনে করেন না: '* এটি' কে ইনট * এর অ্যারে হিসাবে পুনরায় পোস্ট করুন এবং একটি থেকে তৈরি একটি রেফারেন্স ফিরিয়ে দিন: (প্রস্তাবিত নয়, তবে এটি সঠিক 'অ্যারে' কীভাবে দেখায় কাজ করবে):
int & operator[]( int i ) { return *(reinterpret_cast<int**>(this)[i]); }