일반적으로 서명되지 않은 대 서명 된 경고가 필요합니다.서명되지 않은/서명 된 비교 오류가 발생했습니다.
그러나이 특별한 경우에는 억제해야합니다.
std::vector<Blah> blahs;
for(int i = 0; i < blahs.size(); ++i) { ...
나는이 비교를 죽이고 싶어.
감사합니다.
(g ++ 사용)
일반적으로 서명되지 않은 대 서명 된 경고가 필요합니다.서명되지 않은/서명 된 비교 오류가 발생했습니다.
그러나이 특별한 경우에는 억제해야합니다.
std::vector<Blah> blahs;
for(int i = 0; i < blahs.size(); ++i) { ...
나는이 비교를 죽이고 싶어.
감사합니다.
(g ++ 사용)
수정하지 말아야합니다.
for (size_t i = 0; i < blahs.size(); ++i)
당신은 또한 unsigned
를 사용할 수 있지만 size_t
여기에 더 적합 (그리고 다른, 더 큰 범위를 가질 수있다) : 부호없는 형식을 사용합니다.
for (auto iter = blahs.begin(), end = blahs.end(); iter != end; ++iter)
를 컴파일러가 auto
를 지원하지 않는 경우, T
가있다 T::iterator
또는 T::const_iterator
로 auto
교체 : 당신은 단지 반복 루프에서 값을 필요로하지 않는 대신 반복자를 사용 i
를 사용하는 경우 blahs
유형 컴파일러가 C++ 11의 더 완전한 하위 집합을 지원한다면 다음과 같이하십시오 :
for (auto& element : blahs)
어느 것이 가장 좋습니다.
엄밀히 말하면 위의 내용은 "정확하지 않은"것입니다. 그것은해야한다 :
typedef std::vector<Blah> blah_vec;
blah_vec blahs;
for (blah_vec::size_type i = 0; i < blahs.size(); ++i)
그러나 이것은 자세한 될 수 있으며, 내가 아는 모든 구현은 어쨌든 size_type
로 size_t
를 사용합니다. 어떤 이유로 당신이 정말로 i
의 부호있는 정수 유형을해야하는 경우
, 당신은 캐스팅해야합니다 :
// assumes size() will fit in an int
for (int i = 0; i < static_cast<int>(blahs.size()); ++i)
// assumes i will not be negative (so use an unsigned type!)
for (int i = 0; static_cast<size_t>(i) < blahs.size(); ++i)
// and the technically correct way, assuming i will not be negative
for (int i = 0; static_cast<blah_vec::size_type>(i) < blahs.size(); ++i)