ইতিমধ্যে প্রচুর যুক্তিসঙ্গত উত্তর। আমি এমন একটি উপমা দিয়ে চিপ করব যা কিছু পাঠকদের সহায়তা করতে পারে। আপনি চালাতে চান এমন কোনও প্রোগ্রামের জন্য আপনার পথ অনুসন্ধান করার সময় ::
ফাইল সিস্টেম ডিরেক্টরি বিভাজক ' /
' এর মতো অনেকগুলি কাজ করে । বিবেচনা:
/path/to/executable
এটি অত্যন্ত সুস্পষ্ট - কেবলমাত্র ফাইল সিস্টেমের গাছের সঠিক স্থানে একটি এক্সিকিউটেবল এই স্পেসিফিকেশনটির সাথে মেলে পারে, প্যাথ কার্যকরভাবে নির্বিশেষে। একইভাবে ...
::std::cout
... সি ++ নেমস্পেস "ট্রি" তে সমানভাবে স্পষ্ট।
এ জাতীয় নিখুঁত পাথের সাথে বিপরীতে, আপনি আপনার বর্তমান ডিরেক্টরিতে বা আপনার পরিবেশে পরিবর্তনশীল কোনও উপাদানের অধীন আপেক্ষিক পাথগুলি সমাধান করতে ভাল ইউনিক্স শেল (উদাঃ zsh ) কনফিগার করতে পারেন , তাই যদি , এবং আপনি "ইন" থাকতেন, তবে ...PATH
PATH=/usr/bin:/usr/local/bin
/tmp
X11/xterm
... সুখে চালানো হবে /tmp/X11/xterm
এটি পাওয়া গেলে, আর /usr/bin/X11/xterm
অন্য /usr/local/bin/X11/xterm
। তেমনি, বলুন যে আপনি নামধারী একটি নামক স্থানে ছিলেন এবং কার্যকরভাবে এটি X
" using namespace Y
" পরেছিল ...
std::cout
... কোনো খুঁজে পাওয়া যাবে না ::X::std::cout
, ::std::cout
, ::Y::std::cout
, এবং কারণে সম্ভবত অন্যান্য স্থানে যুক্তি নির্ভর লুকআপ (ADL, ওরফে Koenig লুকআপ)। সুতরাং, ::std::cout
ঠিক কোনটি অবজেক্ট বলতে চাইছেন সে সম্পর্কে কেবল সত্যই স্পষ্টভাবে বলা যায়, তবে ভাগ্যক্রমে তাদের সঠিক মনের কেউই তাদের " std
" নামক একটি নিজস্ব শ্রেণি / কাঠামো বা নেমস্পেস তৈরি করতে পারে না, " cout
" নামক কোনও কিছুই তৈরি করে না , সুতরাং কেবল ব্যবহারে অনুশীলন std::cout
করা ভাল।
লক্ষণীয় পার্থক্য :
1) শেলগুলি ক্রমটি ক্রমটি ব্যবহার করে প্রথম ম্যাচটি ব্যবহার করার প্রবণতা PATH
দেখায়, যখন আপনি অস্পষ্ট হন তখন সি ++ একটি সংকলক ত্রুটি দেয়।
2) C ++, কোনো নেতৃস্থানীয় সুযোগ ছাড়া নাম বর্তমান নামস্থান এ, মিলেছে করা যাবে যখন সবচেয়ে ইউনিক্স শেল শুধুমাত্র যে আপনি যদি করা না .
মধ্যে PATH
।
3) সি ++ সর্বদা বিশ্বব্যাপী নেমস্পেস অনুসন্ধান করে (যেমন /
আপনার স্পষ্টতই থাকে PATH
)।
নেমস্পেস এবং প্রতীকগুলির স্পষ্টবাদী সম্পর্কিত সাধারণ আলোচনা
নিখুঁত ::abc::def::...
"পাথ" ব্যবহার করা আপনি কখনও কখনও ব্যবহার করছেন এমন অন্য কোনও স্থানের স্থান থেকে আপনাকে বিচ্ছিন্ন করতে দরকারী হতে পারে, তবে এর অংশবিশেষ বা আপনার লাইব্রেরির ক্লায়েন্ট কোডটি ব্যবহার করে এমন অন্যান্য লাইব্রেরির সামগ্রীর উপরও সত্যই নিয়ন্ত্রণ নেই। অন্যদিকে, এটি আপনাকে প্রতীকের বিদ্যমান "পরম" অবস্থানের সাথে আরও দৃ tight়ভাবে যুক্ত করে, এবং আপনি নামের জায়গাগুলিতে অন্তর্নিহিত মিলের সুবিধাগুলি হারাতে পারেন: কম সংযুক্তি, নেমস্পেসগুলির মধ্যে কোডের সহজ গতিশীলতা এবং আরও সংক্ষিপ্ত, পাঠযোগ্য উত্স কোড ।
অনেক কিছুর মতো এটিও ভারসাম্যপূর্ণ কাজ। অধীনে অভিন্ন পরিচয় সি ++ স্ট্যান্ডার্ড রাখে প্রচুর std::
কম "অনন্য" তুলনায় cout
, যাতে প্রোগ্রামারদের সম্পূর্ণ ভিন্ন কিছু তাদের কোড এ জন্য ব্যবহার করতে পারে (যেমন merge
, includes
, fill
, generate
, exchange
, queue
, toupper
, max
)। দুটি অপ্রাসঙ্গিক অ-স্ট্যান্ডার্ড লাইব্রেরির লেখকরা একে অপরের সম্পর্কে সাধারণত অ-বা কম সচেতন হওয়ায় একই শনাক্তকারীদের ব্যবহারের আরও বেশি সুযোগ রয়েছে। এবং লাইব্রেরিগুলি - সি ++ স্ট্যান্ডার্ড লাইব্রেরি সহ - সময়ের সাথে সাথে তাদের প্রতীকগুলি পরিবর্তন করে। পুরানো কোডটি সংশোধন করার সময় এই সমস্ত সম্ভাব্য দ্ব্যর্থতা তৈরি করে, বিশেষত যখন এর অত্যধিক ব্যবহার হয় using namespace
: আপনি এই জায়গায় সবচেয়ে খারাপ কাজ করতে পারবেনusing namespace
শিরোনামের স্কোপগুলি এড়াতে শিরোলেখগুলিতে, যেমন কোনও নাম স্থান এবং কীভাবে অস্পষ্টতা পরিচালনা করা যায় সে সম্পর্কে একটি নির্বিচারে প্রচুর প্রত্যক্ষ এবং অপ্রত্যক্ষ ক্লায়েন্ট কোড তাদের নিজের সিদ্ধান্ত নিতে অক্ষম।
সুতরাং, একটি শীর্ষস্থানীয় ::
হ'ল সি ++ প্রোগ্রামারের টুলবক্সে সক্রিয়ভাবে একটি পরিচিত সংঘর্ষকে নিস্ক্রিয় করতে এবং / অথবা ভবিষ্যতের অস্পষ্টতার সম্ভাবনা দূর করার জন্য একটি সরঞ্জাম ....
::
অর্থ গ্লোবাল / বেনামে নামস্থান থেকে পরিবর্তনশীল উল্লেখ করে।