In general, size_t should be used whenever you are measuring the size of something. It is really strange that size_t is only required to represent between 0 and SIZE_MAX bytes and SIZE_MAX is only required to be 65,535…
The other interesting constraints from the C++ and C Standards are:
- the return type of
sizeof()issize_tand it is an unsigned integer operator new()takes the number of bytes to allocate as asize_tparametersize_tis defined in<cstddef>SIZE_MAXis defined in<limits.h>in C99 but not mentioned in C++98?!size_tis not included in the list of fundamental integer types so I have always assumed thatsize_tis a type alias for one of the fundamental types:char,short int,int, andlong int.
If you are counting bytes, then you should definitely be using size_t. If you are counting the number of elements, then you should probably use size_t since this seems to be what C++ has been using. In any case, you don’t want to use int – at the very least use unsigned long or unsigned long long if you are using TR1. Or… even better… typedef whatever you end up using to size_type or just include <cstddef> and use std::size_t.