Używamy typu Integer reprezentują zmienne indeksowe przez większość czasu. Ale w niektórych sytuacjach jesteśmy zmuszeni dokonać wyboru
std::vector<int> vec;
....
for(int i = 0; i < vec.size(); ++i)
....
Spowoduje to, że kompilator wyświetli ostrzeżenie, że mieszane użycie zmiennych podpisanych / niepodpisanych. jeśli zmienię indeks jako for( size_t i = 0; i < vec.size(); i++ ), (lub an unsigned int), rozwiąże to problemy.
Jeśli chodzi o bardziej specyficzne użycie typów okien, większość interfejsów API systemu Windows obsługuje DWORD (który jest typowany jako długi bez znaku).
Więc kiedy użyję podobnej iteracji, ponownie spowoduje to samo ostrzeżenie. Teraz, jeśli przepisuję to jako
DWORD dwCount;
....
for(DWORD i = 0; i < dwCount; ++i)
....
Uważam to za trochę dziwne. Może to być problem z postrzeganiem.
Zgadzam się, że powinniśmy używać tego samego typu zmiennej indeksowej, aby uniknąć problemów z zasięgiem w przypadku zmiennych indeksowych. Na przykład jeśli korzystamy
_int64 i64Count; //
....
for(_int64 i = 0; i < i64Count; ++i)
....
Ale w przypadku DWORD lub liczb całkowitych bez znaku występują problemy z przepisaniem go jako
for(int i = 0; (size_t)i < vec.size(); ++i)
Jak większość ludzi pracuje z podobnymi problemami?
std::size_tma wyższą rangę niż int (lub nawet długi). Jeśli rozmiar wektora kiedykolwiek przekroczy std::numeric_limits<int>::max(), będziesz żałować, że użyłeś int.