Usiamo il tipo Integer per rappresentare le variabili di indice il più delle volte. Ma in alcune situazioni, siamo costretti a scegliere
std::vector<int> vec;
....
for(int i = 0; i < vec.size(); ++i)
....
Questo farà sì che il compilatore aumenti l'avviso che usa in modo misto le variabili firmate / non firmate. se faccio la variabile index come for( size_t i = 0; i < vec.size(); i++ )
, (o unsigned int
) risolverà i problemi.
Quando è più specifico usare i tipi di Windows, la maggior parte delle API di Windows hanno a che fare con DWORD (che è stato digitato a macchina come unsigned long).
Quindi, quando uso un'iterazione simile, causerò di nuovo lo stesso avvertimento. Ora se lo riscrivo come
DWORD dwCount;
....
for(DWORD i = 0; i < dwCount; ++i)
....
Trovo che sia un po 'strano Potrebbe essere il problema con le percezioni.
Sono d'accordo sul fatto che dovremmo utilizzare lo stesso tipo di variabile di indice per evitare che i problemi di intervallo possano verificarsi con le variabili dell'indice. Ad esempio, se utilizziamo
_int64 i64Count; //
....
for(_int64 i = 0; i < i64Count; ++i)
....
Ma nel caso di DWORD, o interi senza segno, ci sono problemi nel riscriverlo come
for(int i = 0; (size_t)i < vec.size(); ++i)
In che modo la maggior parte delle persone lavora con problemi simili?