সেখানে মধ্যে একটি পার্থক্য আছে কি size_t
এবং container::size_type
?
আমি যা বুঝি তা size_t
আরও সাধারণ এবং এটি যে কোনও ক্ষেত্রে ব্যবহার করা যেতে পারে size_type
।
তবে container::size_type
নির্দিষ্ট ধরণের ধারকগুলির জন্য অনুকূলিত?
সেখানে মধ্যে একটি পার্থক্য আছে কি size_t
এবং container::size_type
?
আমি যা বুঝি তা size_t
আরও সাধারণ এবং এটি যে কোনও ক্ষেত্রে ব্যবহার করা যেতে পারে size_type
।
তবে container::size_type
নির্দিষ্ট ধরণের ধারকগুলির জন্য অনুকূলিত?
উত্তর:
মান পাত্রে সংজ্ঞায়িত size_type
করার একটি typedef যেমন Allocator::size_type
(বরাদ্দকরণ একটি টেমপ্লেট প্যারামিটার), যার জন্য std::allocator<T>::size_type
করা হয় সাধারণত হতে সংজ্ঞায়িত size_t
(অথবা একটি সামঞ্জস্যপূর্ণ টাইপ)। স্ট্যান্ডার্ড কেসের ক্ষেত্রে এগুলি একই রকম।
তবে, আপনি যদি কাস্টম বরাদ্দকারী ব্যবহার করেন তবে ভিন্ন ভিন্ন অন্তর্নিহিত ধরণের ব্যবহার করা যেতে পারে। তাই container::size_type
সর্বোচ্চ সাধারণত্ব জন্য বাঞ্ছনীয়।
size_t
সময়গুলিতে ছিল এই বাধাগুলির বাস্তব বাস্তবায়ন। যাইহোক, সি ++ 11 এ এটি এখন মূলত: std::make_unsigned<X::difference_type>::type
ডিফল্টরূপে সংজ্ঞায়িত । বাস্তবে যা সম্ভবত একই বা সামঞ্জস্যপূর্ণ হবে size_t
।
size_type
। কি দেয়?
size_t
কোনও বস্তুর আকারের জন্য ব্যবহৃত প্রকার হিসাবে সংজ্ঞায়িত হয় এবং এটি প্ল্যাটফর্ম নির্ভর ।container::size_type
যে ধরনের কন্টেইনারে উপাদানের সংখ্যা জন্য ব্যবহৃত হয় হয় ধারক নির্ভরশীল ।সমস্ত std
পাত্রে এটি ব্যবহার size_t
করে size_type
তবে প্রতিটি স্বতন্ত্র গ্রন্থাগার বিক্রেতা এমন একটি প্রকার চয়ন করে যা এটি তার ধারকটির জন্য উপযুক্ত বলে মনে করে।
আপনি যদি তাকান Qt, আপনি দেখতে পাবেন যে size_type
Qt ধারকগুলির সংস্করণ নির্ভর। Qt3 এ ছিল unsigned int
এবং Qt4 এ এটি পরিবর্তন করা হয়েছিল int
।
int
বদলে ssize_t
, int
ধরনের ছোট হয়।
জন্য std::[w]string
, std::[w]string::size_type
সমান std::allocator<T>::size_type
, যা সমান std::size_t
। অন্যান্য ধারকগুলির জন্য, এটি কিছু প্রয়োগকে স্বাক্ষরবিহীন পূর্ণসংখ্যার ধরণের সংজ্ঞায়িত করে।
কখনও কখনও সঠিক টাইপটি রাখা দরকারী, সুতরাং উদাহরণস্বরূপ কেউ জানে যে প্রকারটি কোথায় (যেমন, করতে UINT_MAX
) এমনভাবে আবৃত হয় যাতে কোনও এটির ব্যবহার করতে পারে। বা টেম্পলেটগুলির জন্য, যেখানে আপনাকে কার্যকরী / শ্রেণির টেম্পলেটগুলির জন্য দুটি একই ধরণের পাস করতে হবে।
প্রায়শই আমি size_t
ব্রেভিটি বা পুনরাবৃত্তকারীদের যাহাই হউক না কেন ব্যবহার করি । জেনেরিক কোডে, যেহেতু আপনি সাধারণত জানেন না যে আপনার টেম্পলেটটি কী ধরণের টেম্পলেট ব্যবহার করা হয় এবং কীভাবে এই ধারকগুলির আকার রয়েছে, তাই আপনাকে Container::size_type
যদি পাত্রে আকার সংরক্ষণ করতে হয় তবে আপনাকে টাইপডেফ ব্যবহার করতে হবে ।
N1804
দেখেছি এবং আমিAllocator::size_type
এবং এর মধ্যে কোনও সম্পর্ক দেখতে পাচ্ছি নাsize_type
। Libstdc ++ এ একটি তাত্ক্ষণিক নজরে এটির মতো কিছু দেখায় না anything