เราใช้ประเภทจำนวนเต็มแทนตัวแปรดัชนีส่วนใหญ่ แต่ในบางสถานการณ์เราถูกบังคับให้เลือก
std::vector<int> vec;
....
for(int i = 0; i < vec.size(); ++i)
....
สิ่งนี้จะทำให้คอมไพเลอร์เพิ่มการเตือนว่าการใช้ตัวแปรที่ลงนาม / ไม่ได้ลงนามร่วมกัน ถ้าฉันสร้างตัวแปรดัชนีเป็นfor( size_t i = 0; i < vec.size(); i++ )
(หรือunsigned int
) มันจะสังคายนาปัญหา
เมื่อเฉพาะเจาะจงมากขึ้นในการใช้ประเภท windows ส่วนใหญ่ Windows APIs จะเกี่ยวข้องกับ DWORD (ซึ่งพิมพ์ -ed เป็นยาวไม่ได้ลงนาม)
ดังนั้นเมื่อฉันใช้การทำซ้ำที่คล้ายกันอีกครั้งจะทำให้คำเตือนเดียวกัน ตอนนี้ถ้าฉันเขียนมันใหม่เป็น
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
มีอันดับสูงกว่า int (หรือยาว) หากขนาดของเวกเตอร์เกินขนาดstd::numeric_limits<int>::max()
คุณจะต้องเสียใจกับการใช้ int