unsigned int
대신 size_t
를 쓸까?정의부터 살펴보자! int
는 basic signed integer
이고, C++ 표준으로 최소 16 bits wide를 가진다.
std::size_t
는 어떤 타입의 사이즈든지 나타낼 수 있는 충분한 bytes를 가진 unsigned integer
이다.
int
와 size_t
가 같은 width를 가진 때를 제외하면, size_t
는 항상 int
보다 더 많은 숫자를 저장할 수 있다. 게다가size_t
는 모든 타입의 사이즈에 상응하는 용량을 저장할 수 있는 capacity
를 가졌고, vector
와 arrays
의 index
도 표현하기 쉽기 때문에 size_t
를 사용한다. 즉, size_t
를 사용하면, 본인이 나타낼 수 있는 의도한 size
또는 index
를 보장받을 수 있기 때문에, size_t
로 indexes
를 표현하는 것이다.
'의도한 것을 보장 받을 수 있다.'는 개념에 대해 다시 얘기해보자. size_t
는 32bit 운영체제에서 부호 없는 32비트 정수이고, 64bit 운영체제에선 부호 없는 64bit 정수로 의도한 바를 보장받을 수 있다.
하지만 unsigned int
또는 int
는 64bit OS라고 해서 꼭 64bit 정수가 아닐 수 있다. 여전히 32bit일 수도 있다. 이게 size_t
와 unsigned int
형의 차이이다.
unsigned int
를 쓰고 size_t
를 써야할까?아마 어떤 걸 써야할지 고민될 것이다. 다행스럽게도 C++ Core Guidelines에는 연산을 어떻게 다뤄야할지에 대해 일러주는 섹션이 있다! 들어가보면, int
같은 signed types
을 언제 써야할지도 나오고, size_t
같은 unsigned types
를 언제 써야할지도 나온다! 직접 찾아서 보도록 하자..
라고 말하긴 했지만, 찾아보니, 메모리나 문자열 등의 길이를 구할 때는 size_t
를 사용한다고 한다. 위에서도 언급한 내용이긴 하다.
💡 번역 및 출처
출처1 : Christopher Di Bella 답변에 더 많은 이야기가 있으니 참고할 것!
출처2