size_t vs int in C++ and/or C

c, c++, size-type

Solution

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()` is `size_t` and it is an unsigned integer

- `operator new()` takes the number of bytes to allocate as a `size_t` parameter

- `size_t` is defined in `<cstddef>`

- `SIZE_MAX` is defined in `<limits.h>` in C99 but not mentioned in C++98?!

- `size_t` is not included in the list of fundamental integer types so I have always assumed that `size_t` is a type alias for one of the fundamental types: `char`, `short int`, `int`, and `long 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`.

Problem

Why is it that in C++ containers, it returns a `size_type` rather than an `int`? If we're creating our own structures, should we also be encouraged to use `size_type`?

Original source

Related problems