এগুলি যেখানে ঘোষিত হয় সেগুলির মধ্যে size_t
এবং সেগুলির ক্ষেত্রে কী পার্থক্য রয়েছে std::size_t
, কখন সেগুলি ব্যবহার করা উচিত এবং অন্য কোনও ভিন্ন বৈশিষ্ট্য রয়েছে?
এগুলি যেখানে ঘোষিত হয় সেগুলির মধ্যে size_t
এবং সেগুলির ক্ষেত্রে কী পার্থক্য রয়েছে std::size_t
, কখন সেগুলি ব্যবহার করা উচিত এবং অন্য কোনও ভিন্ন বৈশিষ্ট্য রয়েছে?
উত্তর:
সি size_t
এবং সি ++ std::size_t
এর উভয়ই একই।
সি-তে, এটি <stddef.h>
এবং সি ++ এ সংজ্ঞায়িত হয়েছে, এর সংজ্ঞা দেওয়া হয়েছে <cstddef>
যার বিষয়বস্তু সি শিরোনামের সমান (নীচের উদ্ধৃতিটি দেখুন)। তার হিসাবে সংজ্ঞায়িত করা স্বাক্ষরবিহীন পূর্ণসংখ্যা টাইপ এর ফলাফলের এর যাও sizeof অপারেটর।
সি স্ট্যান্ডার্ড §17.7 / 2 এ বলেছে,
size_t যা স্বাক্ষরবিহীন পূর্ণসংখ্যা টাইপ এর ফলাফলের এর যাও sizeof অপারেটর
এবং সি ++ স্ট্যান্ডার্ড cstddef
head18.1 / 3 এ ( শিরোনাম সম্পর্কে ) বলেছে,
নিম্নলিখিত পরিবর্তনগুলির সাথে বিষয়বস্তুগুলি স্ট্যান্ডার্ড সি লাইব্রেরির শিরোনামের মতো ।
হ্যাঁ, উভয়ই একই; পার্থক্যটি হ'ল সি ++ নামস্থলে সংজ্ঞায়িত size_t
করে std
।
দয়া করে লক্ষ্য করুন যে উপরের লাইনটি "নিম্নলিখিত পরিবর্তনগুলির সাথে "ও উল্লেখ করেছে যা উল্লেখ করা হচ্ছে না size_t
। এটি বরং ভাষাতে সি ++ দ্বারা তৈরি নতুন সংযোজনগুলি (বেশিরভাগ ক্ষেত্রে) উল্লেখ করা হয় (সি তে উপস্থিত নেই) যা একই শিরোনামেও সংজ্ঞায়িত হয়েছে।
আকার_t এর পরিসীমা এবং স্টোরেজ আকার সম্পর্কে উইকিপিডিয়ায় খুব ভাল তথ্য রয়েছে
আকার_t এর পরিসীমা এবং স্টোরেজ আকার
প্রকৃত size_t প্রকার প্ল্যাটফর্ম-নির্ভরশীল ; একটি সাধারণ ভুল হ'ল সাইজ_টি হ'ল স্বাক্ষরযুক্ত ইন্টের সমান, যা প্রোগ্রামিং ত্রুটির কারণ হতে পারে, [৩] [৪] উদাহরণস্বরূপ 32২ থেকে 64৪-বিট আর্কিটেকচারে যাওয়ার সময়।
1999 এর আইএসও সি স্ট্যান্ডার্ড (সি 99) অনুসারে, সাইজ_টি কমপক্ষে 16 বিটের একটি স্বাক্ষরযুক্ত পূর্ণসংখ্যার ধরণের।
এবং বাকী আপনি উইকিপিডিয়াতে এই পৃষ্ঠাটি থেকে পড়তে পারেন ।
size_t
থাকলে using namespace std;
বা using std::size_t;
। তবে, বেশিরভাগ সংকলক এটি এটিকে অনুমতি দেয় এবং স্ট্যান্ডার্ড তাদের বিশেষভাবে এটির অনুমতি দেয় (.5D.5 / 3)।
<cstddef>
ঘোষণা করতে পারে বা নাও পারে ::size_t
, সুতরাং আপনি এটির উপস্থিতি বা অনুপস্থিত থাকার উপর নির্ভর করতে পারবেন না, যদি <stddef.h>
না সি লাইব্রেরির বিশেষভাবে অন্তর্ভুক্ত থাকে বা এটির গ্যারান্টিযুক্ত অন্য কোন শিরোনাম না থাকে।
::size_t
যেমন উপস্থিত রয়েছে <stddef.h>
, সুতরাং আপনার সর্বদা এটির সাথে যোগ্যতা অর্জনের প্রয়োজন হবে না std::
।
সি ++ থেকে "" 17.4.3.1.4 প্রকার ":
স্ট্যান্ডার্ড সি লাইব্রেরি থেকে প্রতিটি প্রকার টির জন্য (পাদটীকা 169), প্রকারসমূহ: টি এবং স্ট্যান্ড :: টি প্রকরণ প্রয়োগের জন্য সংরক্ষিত এবং যখন সংজ্ঞায়িত করা হয়: :: টি স্টাড :: টির মতো হবে।
এবং পাদটীকা 169:
এই প্রকারগুলি হ'ল ক্লক_টি, ডিভ_টি, ফাইল, এফপোস_টি, এলকনভ, এলডিভ_টি, এমবিস্টেট_টি, পিটিআরডিফ_টি, সিগ_অ্যাটমিক_টি, সাইজ_টি, টাইম_টি, টিএম, ভিএলিস্ট, উইকট্রান্স_টি, ডাব্লু টাইপ_টি এবং উইন্ট_টি।
std::T
সংজ্ঞায়িত রূপগুলি উপর নির্ভর করা উচিত নয় ?
#include <stddef.h>
তারপর std::size_t
হয়তো বা উপলব্ধ নাও হতে পারে। আপনি #include <cstddef>
তারপর std::size_t
পাওয়া যাচ্ছে, কিন্তু size_t
শক্তি না।
std::
এটিকে সংজ্ঞায়িত করতে হবে এবং অনুচ্ছেদে বলেছে এটি এটি শীর্ষ-স্তরের নেমস্পেসেও তাদের সংজ্ঞায়িত করতে পারে এবং যদি এটি হয় তবে এটি অবশ্যই তাদের std::
শীর্ষ এবং স্তরের স্তরে সংজ্ঞায়িত করতে হবে । বেশিরভাগ সংকলকগুলিতে কেবল সি শিরোনাম অন্তর্ভুক্ত থাকে এবং নামগুলি আমদানি করা হয় std::
, সুতরাং চিহ্নগুলি উভয়টিতেই সংজ্ঞায়িত হয়।
std::
সি তীরে থেকে আগত আইডেন্টিফায়ারগুলির রূপগুলি নিয়ে বিরক্ত করি না । আমি <xxxxx.h>
স্ট্যান্ডার্ড সি হেডারগুলির সাথে লেগে আছি - এটি কখনও সমস্যা হয়নি। তাই, আমি ব্যবহার করতে চাই <stddef.h>
এবং size_t
দিতে না করার জন্য একটি দ্বিতীয় চিন্তার std::size_t
; আসলে, এটি আমার মনকে কখনই অতিক্রম করে না যে আছে (বা হতে পারে) এ std::size_t
।
এসটিডি :: size_t আসলে stddef.h এর size_t ।
cstddef নিম্নলিখিত দেয়:
#include <stddef.h>
namespace std
{
using ::ptrdiff_t;
using ::size_t;
}
... কার্যকরভাবে পূর্ববর্তী সংজ্ঞাটি স্ট্যান্ড নেমস্পেসে আনছে।
<cstddef>
এবং পেতে আশা করতে পারবেন না ::size_t
, তবে আপনি অন্তর্ভুক্ত থাকলে <stddef.h>
আপনি পাবেন std::size_t
।
<stddef.h>
আপনি কেবল পাবেন ::size_t
।
<cstddef>
তবে আপনাকে পাওয়ার নিশ্চয়তা এবং আপনিও পেতে std::size_t
পারেন ::size_t
(তবে এটির নিশ্চয়তা নেই)। যদি আপনি অন্তর্ভুক্ত করেন <stddef.h>
তবে আপনাকে পাওয়ার নিশ্চয়তা রয়েছে ::size_t
এবং আপনিও পেতে পারেন std::size_t
(তবে এটির নিশ্চয়তা নেই)। এটি সি ++ 03 তে আলাদা ছিল তবে এটি কার্যকরভাবে অ-বাস্তবায়নযোগ্য এবং ত্রুটি হিসাবে স্থির ছিল।