আপনি শিরোনাম ছাড়া করতে পারেন:
using size_t = decltype(sizeof(int));
using size_t = decltype(sizeof 1);
using size_t = decltype(sizeof "anything");
এটি কারণ সি ++ স্ট্যান্ডার্ডের প্রয়োজন:
ফলাফল sizeof
এবং sizeof...
ধরণের ধ্রুবক std::size_t
। [দ্রষ্টব্য: std::size_t
মানক শিরোনামে <cstddef>
(18.2) সংজ্ঞায়িত করা হয়েছে । - শেষ নোট]
অন্য কথায়, মানটির প্রয়োজন:
static_assert(std::is_same<decltype(sizeof(int)), std::size_t>::value,
"This never fails.");
এছাড়াও মনে রাখবেন, typedef
বিশ্বব্যাপী এবং std
নেমস্পেসে এই ঘোষণাটি করা পুরোপুরি ঠিক আছে , যতক্ষণ না typedef
এটি একই টাইপডেফ-নামের অন্যান্য সমস্ত ঘোষণার সাথে মেলে না ( মিলনীয় ঘোষণার ক্ষেত্রে একটি সংকলক ত্রুটি জারি করা হয়)।
এই কারণ:
§§.১.৩.১ একটি টাইপিডেফ -নাম কোনও শ্রেণির ঘোষণা (9.1) বা এনাম ডিকোলেমেনশন করার উপায়ে নতুন ধরণের পরিচয় দেয় না।
§§.১.৩.৩ একটি প্রদত্ত অ-শ্রেণীর স্কোপে একটি typedef
স্পেসিফায়ার সেই সুযোগে ঘোষিত যে কোনও প্রকারের নামটি এরই মধ্যে উল্লেখ করে যা এটি ইতিমধ্যে উল্লেখ করে rede
সন্দিহানরা এই কথাটি বলে যে এটি নেমস্পেসে একটি নতুন ধরণের সংযোজন গঠন করে std
, এবং এই জাতীয় আইনটি স্ট্যান্ডার্ড দ্বারা স্পষ্টভাবে নিষিদ্ধ করা হয়, এবং এটি ইউবি এবং এটি এখানে রয়েছে; আমার বলতে হবে যে এই মনোভাবটি অন্তর্নিহিত বিষয়গুলির গভীর বোঝাকে উপেক্ষা করা এবং অস্বীকার করার সমান।
নামস্থানটিতে নতুন ঘোষণা এবং সংজ্ঞা যুক্ত করার স্ট্যান্ডার্ড নিষেধাজ্ঞাগুলি std
এমনটি করার মাধ্যমে ব্যবহারকারী স্ট্যান্ডার্ড লাইব্রেরিতে গোলমাল করতে পারেন এবং তার পুরো লেগটি বন্ধ করে দিতে পারেন। স্ট্যান্ডার্ড লেখকদের পক্ষে ব্যবহারকারীকে কয়েকটি নির্দিষ্ট জিনিস বিশেষজ্ঞ করতে এবং ব্যবহারকারীর উচিত নয় এমন প্রতিটি জিনিস নিষিদ্ধ করার পরিবর্তে এবং কিছু গুরুত্বপূর্ণ (এবং সেই লেগ) অনুপস্থিত হওয়ার ঝুঁকি থাকা ছাড়া ভাল পরিমাপের জন্য অন্য কিছু করা নিষিদ্ধ করা সহজ ছিল। তারা অতীতে এটি করেছিল যখন প্রয়োজন হয় যে কোনও স্ট্যান্ডার্ড কনটেইনার একটি অসম্পূর্ণ প্রকারের সাথে ইনস্ট্যান্ট করা উচিত নয়, যদিও কিছু ধারক ভালভাবে করতে পারে (দেখুন স্ট্যান্ডার্ড লাইব্রেরিয়ান: ম্যাথু এইচ আস্টার্নের অসম্পূর্ণ প্রকারের ধারক ):
... শেষ পর্যন্ত, এগুলি সবগুলি খুব দুর্বল এবং খুব খারাপভাবে বোঝা গেল; স্ট্যান্ডার্ডাইজেশন কমিটি বলেছে যে এসটিএল কনটেইনারগুলি অসম্পূর্ণ প্রকারের সাথে কাজ করার কথা নয় তা ছাড়া আর কোনও বিকল্প আছে বলে মনে করেনি। ভাল পরিমাপের জন্য, আমরা সেই নিষেধটি বাকী স্ট্যান্ডার্ড লাইব্রেরিতেও প্রয়োগ করেছি।
... পূর্ববর্তী ক্ষেত্রে, এখন যে প্রযুক্তিটি আরও ভালভাবে বোঝা গেছে, সেই সিদ্ধান্তটি এখনও মূলত সঠিক বলে মনে হচ্ছে। হ্যাঁ, কিছু ক্ষেত্রে স্ট্যান্ডার্ড পাত্রে কিছু কার্যকর করা সম্ভব হয় যাতে সেগুলি অসম্পূর্ণ প্রকারের সাথে ইনস্ট্যান্ট করা যায় - তবে এটি আরও স্পষ্ট যে অন্যান্য ক্ষেত্রে এটি কঠিন বা অসম্ভব হতে পারে। এটি বেশিরভাগই সুযোগ ছিল যে আমরা যে প্রথম পরীক্ষাটি ব্যবহার করে চেষ্টা করেছিলাম std::vector
তা সহজ ঘটনাগুলির একটি হয়ে থাকে।
প্রদত্ত যে ভাষার নিয়মগুলি std::size_t
হুবহু হওয়া দরকার decltype(sizeof(int))
, করানো namespace std { using size_t = decltype(sizeof(int)); }
সেই জিনিসগুলির মধ্যে একটি যা কোনও কিছুতেই ভাঙে না।
সি ++ 11 এর আগে টেমপ্লেটগুলির জড়িত কোনও ভাল চুক্তি না করেই কোনও সাধারণ বিবৃতিতে ফলাফলের decltype
ধরণের ঘোষণা করার কোনও উপায় ছিল না এবং এভাবেই ছিল না sizeof
। size_t
বিভিন্ন টার্গেট আর্কিটেকচারে বিভিন্ন ধরণের উপকরণ রাখে, তবে, কেবল ফলাফলের জন্য একটি নতুন অন্তর্নির্মিত টাইপ যুক্ত করার জন্য এটি মার্জিত সমাধান হবে না sizeof
এবং সেখানে কোনও স্ট্যান্ডার্ড বিল্ট-ইন টাইপইফ নেই। অতএব, তখনকার সময়ে সবচেয়ে বহনযোগ্য সমাধানটি হ'ল size_t
কিছু নির্দিষ্ট শিরোনামে টাইপ এলিফ স্থাপন করা এবং এটি নথি।
সি ++ 11 এ এখন স্ট্যান্ডার্ডের সেই সঠিক প্রয়োজনীয়তাটিকে একটি সাধারণ ঘোষণা হিসাবে লেখার উপায় রয়েছে।