ほとんどの場合、インデックス変数を表す整数型を使用します。しかし、状況によっては、選択を余儀なくされます
std::vector<int> vec;
....
for(int i = 0; i < vec.size(); ++i)
....
これにより、コンパイラは、符号付き変数と符号なし変数が混在して使用されているという警告を発します。インデックス変数をとしてfor( size_t i = 0; i < vec.size(); i++ )
(またはunsigned int
)作成すると、問題が整理されます。
Windowsタイプの使用がより具体的になると、ほとんどのWindows APIはDWORD(unsigned longとしてtypedefされます)を処理します。
したがって、同様の反復を使用すると、再び同じ警告が発生します。今、私はそれを
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(またはlong)よりも高いランクです。ベクトルのサイズがを超える場合、std::numeric_limits<int>::max()
intを使用したことを後悔します。