我们大多数时候使用Integer类型表示索引变量。但是在某些情况下,我们不得不选择
std::vector<int> vec;
....
for(int i = 0; i < vec.size(); ++i)
....
这将导致编译器发出混合使用有符号/无符号变量的警告。如果将index变量设置为for( size_t i = 0; i < vec.size(); i++ )
,(或unsigned int
)它将解决问题。
当更加具体地使用Windows类型时,大多数Windows API都在处理DWORD(类型定义为unsigned long)。
因此,当我使用类似的迭代时,将再次引起相同的警告。现在,如果我将其重写为
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。