Integer 타입은 대부분 인덱스 변수를 나타냅니다. 하지만 어떤 상황에서는
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 (부호없는 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를 사용한 것을 후회하게됩니다.