c++ - স্ট্যাটিক উপর নামহীন নামস্থান উচ্চতর?




static namespaces (2)

আপনি মূলত সি ++ স্ট্যান্ডার্ড থেকে $ 7.3.1.1 / 2 বিভাগের উল্লেখ করছেন,

একটি নাম স্পেসে বস্তুগুলি ঘোষণা করার সময় স্ট্যাটিক কীওয়ার্ড ব্যবহার অব্যবহৃত হয়; নামহীন-নামস্থান একটি উচ্চতর বিকল্প উপলব্ধ করা হয়।

অনামী নামস্থানটি স্ট্যাটিক কীওয়ার্ড থেকে উচ্চতর, প্রাথমিকভাবে কারণ static কেবলমাত্র ভেরিয়েবল ঘোষণা এবং ফাংশনগুলিতে প্রযোজ্য, ব্যবহারকারী-নির্ধারিত প্রকারের ক্ষেত্রে নয়

নিম্নলিখিত কোড সি ++ বৈধ

   //legal code
   static int sample_function() { /* function body */ }
   static int sample_variable;

কিন্তু এই কোড বৈধ নয়:

   //illegal code
   static class sample_class { /* class body */ };
   static struct sample_struct { /* struct body */ };

তাই সমাধান হল, নামহীন-নামস্থান, যা এই,

   //legal code
   namespace 
   {  
        class sample_class { /* class body */ };
        struct sample_struct { /* struct body */ };
   }

আশা করা যায় যে কেন unnamed-namespace static থেকে উচ্চতর।

এছাড়াও, মনে রাখবেন যে স্ট্যাটিক কীওয়ার্ডের ব্যবহার একটি নেমস্পেস স্কোপে বস্তুগুলি প্রকাশ করার সময় বর্জন করা হয় (মান অনুযায়ী)।

নামহীন নামস্থান static শব্দ থেকে উচ্চতর কিভাবে হয়?


এই সম্পর্কিত একটি আকর্ষণীয় সমস্যা আছে:

ধরুন আপনি static কীওয়ার্ড বা নামহীন namespace মডিউল (অনুবাদ ইউনিট) তে কিছু ফাংশন অভ্যন্তরীণ করার জন্য ব্যবহার করেন, কারণ এই ফাংশনটিকে মডিউল দ্বারা অভ্যন্তরীণভাবে ব্যবহার করা এবং এর বাইরে অ্যাক্সেসযোগ্য নয়। (নামহীন namespace ফাংশন ছাড়াও ডেটা এবং টাইপ সংজ্ঞাগুলি অভ্যন্তরীণ, এর সুবিধা আছে)।

সময়ের সাথে সাথে আপনার মডিউল বাস্তবায়ন করার উত্স ফাইলটি বড় হয়ে যায় এবং আপনি এটি বিভিন্ন পৃথক উৎস ফাইলগুলিতে বিভক্ত করতে চান, যা কোডটিকে আরও ভালভাবে সংগঠিত করার, দ্রুত সংজ্ঞাগুলি সন্ধান করতে এবং স্বাধীনভাবে সংকলিত করার অনুমতি দেয়।

কিন্তু এখন আপনি একটি সমস্যার মুখোমুখি হন: এই ফাংশনটি আর মডিউলে static পারে না, কারণ static প্রকৃতপক্ষে মডিউলটিকে বোঝায় না, তবে উৎস ফাইল (অনুবাদ ইউনিট) -এ। আপনি তাদের মডিউল অন্যান্য অংশ (বস্তু ফাইল) থেকে অ্যাক্সেস করার অনুমতি দিতে তাদের অ static করতে বাধ্য করা হয়। কিন্তু এর অর্থ হল যে তারা আর মডিউলে গোপন / ব্যক্তিগত নয়: বহিঃসংযোগ থাকা, তাদের অন্য মডিউলগুলি থেকে অ্যাক্সেস করা যেতে পারে, যা আপনার মূল উদ্দেশ্য ছিল না

নামহীন namespace এই সমস্যার সমাধান করবে না কারণ এটি একটি নির্দিষ্ট উৎস ফাইল (অনুবাদ ইউনিট) এর জন্যও সংজ্ঞায়িত এবং বাইরে থেকে অ্যাক্সেস করা যাবে না।

এটি উল্লেখযোগ্য হতে পারে যে কেউ যদি কোন namespace private করে তবে এটি যা যা সংজ্ঞায়িত করা হয় তা নির্দিষ্টভাবে মডিউল দ্বারা অভ্যন্তরীণভাবে ব্যবহার করা হয়। কিন্তু অবশ্যই সি ++ তে এমন কোন ধারণা নেই যা "মডিউল", কেবল "অনুবাদ ইউনিট" যা সোর্স ফাইলগুলিতে শক্তভাবে আবদ্ধ।





static-functions