Ми використовуємо тип Integer, які представляють змінні індексу більшу частину часу. Але в деяких ситуаціях ми змушені вибирати
std::vector<int> vec;
....
for(int i = 0; i < vec.size(); ++i)
....
Це змусить компілятора підвищити попередження про змішане використання підписаних / неподписаних змінних. якщо я зроблю змінну індексу як for( size_t i = 0; i < vec.size(); i++ ), (або an unsigned int), вона розібрає проблеми.
Коли більш специфічно використовувати типи Windows, більшість API API мають справу з DWORD (який typedef-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.