हम अधिकांश समय इंटेगर प्रकार का प्रतिनिधित्व सूचकांक चर का उपयोग करते हैं। लेकिन कुछ स्थितियों में, हमें चुनने के लिए मजबूर किया जाता है
std::vector<int> vec;
....
for(int i = 0; i < vec.size(); ++i)
....
यह संकलक को चेतावनी को बढ़ाने का कारण होगा जो हस्ताक्षरित / अहस्ताक्षरित चर का मिश्रित उपयोग करता है। अगर मैं इंडेक्स चर बनाता हूं for( size_t i = 0; i < vec.size(); i++ )
, (या ए unsigned int
) तो यह मुद्दों को सुलझा देगा।
जब यह विंडोज़ प्रकारों का उपयोग करने के लिए और अधिक विशिष्ट हो जाता है, तो अधिकांश विंडोज एपीआई DWORD के साथ काम कर रहे हैं (जो कि टाइप किए गए एफ़डी-एड के रूप में)।
इसलिए जब मैं समान पुनरावृत्ति का उपयोग करता हूं, तो फिर से उसी चेतावनी का कारण होगा। अब अगर मैं इसे फिर से लिखूं
DWORD dwCount;
....
for(DWORD i = 0; i < dwCount; ++i)
....
मुझे यह थोड़ा अजीब लगता है। यह समस्या हो सकती है।
मैं मानता हूं कि हम उसी तरह के इंडेक्स वैरिएबल का उपयोग करने वाले हैं जिससे कि इंडेक्स वैरिएबल के साथ रेंज की समस्याएं हो सकें। उदाहरण के लिए यदि हम उपयोग कर रहे हैं
_int64 i64Count; //
....
for(_int64 i = 0; i < i64Count; ++i)
....
लेकिन DWORD, या अहस्ताक्षरित पूर्णांक के मामले में, इसे फिर से लिखने में कोई समस्या है
for(int i = 0; (size_t)i < vec.size(); ++i)
अधिकांश लोग समान मुद्दों के साथ कैसे काम कर रहे हैं?
std::size_t
में इंट (या उससे भी लंबे) की तुलना में एक उच्च रैंक है। यदि वेक्टर का आकार कभी भी अधिक std::numeric_limits<int>::max()
हो जाता है, तो आपको int का उपयोग करने पर पछतावा होगा।