আমরা বেশিরভাগ সময়ে ইন্টিজার টাইপ উপস্থাপন করে সূচক ভেরিয়েবল ব্যবহার করি। তবে কিছু পরিস্থিতিতে আমরা বাছাই করতে বাধ্য হই
std::vector<int> vec;
....
for(int i = 0; i < vec.size(); ++i)
....
এটি সংকলক স্বাক্ষরিত / স্বাক্ষরযুক্ত ভেরিয়েবলগুলির মিশ্র ব্যবহারের সতর্কতাটি বাড়িয়ে তুলবে। যদি আমি সূচকটিকে পরিবর্তনশীল হিসাবে তৈরি করি for( size_t i = 0; i < vec.size(); i++ )
, (বা একটি unsigned int
) এটি সমস্যার সমাধান করবে out
উইন্ডোজের ধরণগুলি ব্যবহার করার ক্ষেত্রে এটি আরও নির্দিষ্ট হয়ে গেলে, বেশিরভাগ উইন্ডোজ এপিআইগুলি ডিডাবর্ড (যা স্বাক্ষরবিহীন দীর্ঘ হিসাবে টাইপডেফ-এড) নিয়ে কাজ করে।
সুতরাং যখন আমি অনুরূপ পুনরাবৃত্তি ব্যবহার করি তখন আবার একই সতর্কতা সৃষ্টি করে। এখন যদি আমি এটি আবার লিখি
DWORD dwCount;
....
for(DWORD i = 0; i < dwCount; ++i)
....
আমি এটি কিছুটা অদ্ভুত বলে মনে করি। উপলব্ধি হ'ল সমস্যা হতে পারে।
আমি সম্মত হই যে সূচিপত্রের ভেরিয়েবলগুলির সাথে পরিসীমা সমস্যা হতে পারে এড়াতে আমাদের একই ধরণের সূচক ভেরিয়েবল ব্যবহার করার কথা are যেমন আমরা যদি ব্যবহার করছি
_int64 i64Count; //
....
for(_int64 i = 0; i < i64Count; ++i)
....
তবে ডিডাবর্ড, বা স্বাক্ষরবিহীন পূর্ণসংখ্যার ক্ষেত্রে এটি পুনরায় লেখার ক্ষেত্রে কোনও সমস্যা আছে
for(int i = 0; (size_t)i < vec.size(); ++i)
কীভাবে বেশিরভাগ মানুষ একই রকম সমস্যা নিয়ে কাজ করছেন?
std::size_t
(বা এমনকি দীর্ঘ) এর চেয়ে উচ্চতর পদ থাকে। যদি ভেক্টরের আকার কখনই অতিক্রম করে std::numeric_limits<int>::max()
, আপনি আন্তঃব্যবহার ব্যবহার করে অনুশোচনা করবেন।