Usamos o tipo Inteiro para representar variáveis de índice na maioria das vezes. Mas, em algumas situações, somos forçados a escolher
std::vector<int> vec;
....
for(int i = 0; i < vec.size(); ++i)
....
Isso fará com que o compilador aumente o aviso de que o uso misto de variáveis assinadas / não assinadas. se eu fizer a variável index como for( size_t i = 0; i < vec.size(); i++ ), (ou uma unsigned int), ela resolverá os problemas.
Quando se torna mais específico o uso de tipos de janelas, a maioria das APIs do Windows trata do DWORD (que é digitado como não assinado por muito tempo).
Portanto, quando eu usar iterações semelhantes, causarei novamente o mesmo aviso. Agora, se eu reescrevê-lo como
DWORD dwCount;
....
for(DWORD i = 0; i < dwCount; ++i)
....
Acho isso um pouco estranho. Pode ser o problema com as percepções.
Concordo que devemos usar o mesmo tipo de variável de índice para evitar que problemas de intervalo possam ocorrer com as variáveis de índice. Por exemplo, se estamos usando
_int64 i64Count; //
....
for(_int64 i = 0; i < i64Count; ++i)
....
Mas no caso de DWORD, ou números inteiros não assinados, há algum problema em reescrevê-lo como
for(int i = 0; (size_t)i < vec.size(); ++i)
Como a maioria das pessoas está trabalhando com problemas semelhantes?
std::size_té uma classificação mais alta que a int (ou até longa). Se o tamanho do vetor exceder std::numeric_limits<int>::max(), você se arrependerá de ter usado int.