সম্পাদনা: আমি কিছু পরীক্ষা-নিরীক্ষা করেছি এবং আবিষ্কারকৃত জিনিসগুলি আমার ভাবনার চেয়ে কিছুটা সূক্ষ্ম। আমি এখন যা মনে করি তা হ'ল একটি সঠিক উত্তর।
&s
কোনও মূল্য নেই তাই রেফারেন্সের ধরণটি উল্লেখ না করে আপনি এটিতে কোনও রেফারেন্স তৈরি করতে পারবেন না const
। উদাহরণস্বরূপ, আপনি না করতে পারেন
string * &r = &s;
কিন্তু আপনি করতে পারেন
string * const &r = &s;
আপনি যদি ফাংশন শিরোনামে অনুরূপ ঘোষণা রাখেন তবে এটি কার্যকর হবে।
void myfunc(string * const &a) { ... }
অস্থায়ীতা নামে একটি আর সমস্যা আছে। নিয়মটি হ'ল আপনি যদি কোনও অস্থায়ী সম্পর্কে উল্লেখ করেন তবেই তাconst
। সুতরাং এই ক্ষেত্রে কেউ তর্ক করতে পারে যে & গুলি একটি অস্থায়ী, এবং তাই const
ফাংশন প্রোটোটাইপ মধ্যে ঘোষণা করা আবশ্যক । ব্যবহারিক দৃষ্টিকোণ থেকে এটি এই ক্ষেত্রে কোনও পার্থক্য করে না। (এটি হয় কোনও মূল্যায়ন বা অস্থায়ী E যেভাবেই, একই নিয়ম প্রযোজ্য)) তবে কড়া কথায় বলতে গেলে, আমি মনে করি এটি সাময়িক নয় বরং একটি মূল্যবান। আমি ভাবছি দুজনের মধ্যে পার্থক্য করার কোনও উপায় আছে কিনা। (সম্ভবত এটি সহজেই সংজ্ঞায়িত করা হয়েছে যে সমস্ত অস্থায়ী মূল্যবোধগুলি মূল্যবান এবং সমস্ত অ-অমূল্যগুলি অস্থায়ী হয় I'm আমি মানক সম্পর্কে বিশেষজ্ঞ নই))
বলা হচ্ছে, আপনার সমস্যা সম্ভবত উচ্চতর স্তরের। আপনি কেন ঠিকানার রেফারেন্স চান s
? আপনি যদি কোনও পয়েন্টারের রেফারেন্স চান তবে আপনাকে s
পয়েন্টারটি হিসাবে হিসাবে সংজ্ঞায়িত করতে হবে
string *p = &s;
myfunc(p);
আপনি যদি কোনও রেফারেন্স s
বা পয়েন্টার s
চান তবে সোজা কাজটি করুন।
string* const& val
কম-সুসংগঠনের সমতুল্যের পরিবর্তে মিঃ বুড় উদাহরণ 2 নং পদ্ধতিতে যেভাবে লিখেছেন তা লেখার পক্ষে বিশেষভাবে শিক্ষণীয়const string* &val
। আমার দৃষ্টিতে এটি স্পষ্টভাবে একটি রেখাযুক্ত রেফারেন্স , পয়েন্টারটির কাছে, একটি স্ট্রিংয়ের কাছে। সঠিকভাবে এই স্পষ্টতা পেতে আমি ব্যক্তিগতভাবে ঘোষণারT const&
পরিবর্তে লেখার পছন্দ করিconst T&
।