티스토리 뷰

vector<int> v;
int i = 0;

cout << v.size() - 1 << endl;

for (i = 0; i < v.size() - 1; i++) {
    cout << "loop" << endl;
}

아무 생각 없이 작성한 위 코드는 몇번의 루프를 돌까?
나는 아무 생각 없이 size가 0 이기 때문에 for loop 안으로 안 들어갈 것이라 생각했다.
잘못된 생각이었다.

4294967295번의 루프를 탄다...

vector::size()의 리턴 값은 size_t 이고 이는 즉 unsigned_int 이다..
unsigned_int의 MAX 에서 1을 뺀 만큼 루프를 돈다는 뜻.

따라서 저렇게 for loop 안에 vector의 size() - 1 같은 연산을 시도 하려는 경우 반드시 int로 캐스팅 해서 쓰거나,
(UINT32)-1 이 되는 상황이 절대 없다는 확신 하에 써야 할 것이다.

참고로 maxVal = max(maxVal, v.size()); 이런것도 컴파일 에러 난다. max 안에는 size_t가 못들어간다. 암시적으로 형변환을 안해주는 듯.

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
글 보관함