Çoğu zaman dizin değişkenlerini temsil eden Tamsayı türü kullanırız. Ancak bazı durumlarda,
std::vector<int> vec;
....
for(int i = 0; i < vec.size(); ++i)
....
Bu, derleyicinin imzalı / imzasız değişkenlerin karışık kullanımıyla ilgili uyarıyı yükseltmesine neden olur. dizin değişkenini for( size_t i = 0; i < vec.size(); i++ )
(veya an unsigned int
) olarak yaparsam sorunları sıralar.
Windows türlerini kullanmak daha spesifik hale geldiğinde, Windows API'larının çoğu DWORD ile uğraşır (imzasız uzun olarak yazılan).
Benzer yinelemeyi kullandığımda yine aynı uyarıya neden olur. Şimdi şöyle yazarsam
DWORD dwCount;
....
for(DWORD i = 0; i < dwCount; ++i)
....
Bunu biraz garip buluyorum. Algılardaki sorun olabilir.
Endeks değişkenleri ile aralık problemlerinin oluşmasını önlemek için aynı tip indeks değişkenini kullanmamız gerektiğini kabul ediyorum. Örneğin;
_int64 i64Count; //
....
for(_int64 i = 0; i < i64Count; ++i)
....
Ancak DWORD veya imzasız tamsayıların yeniden yazılmasında herhangi bir sorun var mı?
for(int i = 0; (size_t)i < vec.size(); ++i)
İnsanların çoğu benzer sorunlarla çalışıyor?
std::size_t
int'den (hatta uzuntan) daha yüksek bir sıralamadır. Vektörün boyutu aşılırsa std::numeric_limits<int>::max()
, int kullandığınızdan pişman olursunuz.