std::size_t
- это тип, который используется для подсчета мест в памяти, например, длины массива, размера объектов и т.д. Контейнеры STL используют container_type::size_type
, который обычно отображается на std::size_t
, но это не гарантировано.
Если вам нужны типы для хранения неотрицательных интегралов, которые не используются для вышеуказанных целей, то чем плохи unsigned short
, unsigned int
и unsigned long
?
size_t на самом деле является typedef, определенным в stddef.h и зависит от платформы, поэтому вы можете На самом деле не делаю никаких предположений по этому поводу. В gcc 4.4 (i486) он определяется как long unsigned int, если ОС уже не определяет его, поэтому, например, в Free BSD 5 на машине i386 он будет беззнаковым int, тогда как на машине ia64 он будет беззнаковым длинным. Так, например, если вы попытаетесь сделать что-то вроде
size_t i;
...
char buf[4];
sprintf(buf,"%u",i);
. Иногда это сработает, но на некоторых платформах / компиляторах вы получите переполнение буфера.
Я считаю, что это может вызвать некоторые неприятные проблемы с переносимостью, если вам нужно сделать предположения о размере / типе size_t.
Вы можете использовать size_t для переменных, которые представляют размеры объектов, хранящихся в памяти. Но нет особых причин использовать его для чего-то еще. Он существует главным образом потому, что unsigned int может быть недостаточно широким, чтобы представить размер объекта памяти. (Рассмотрим архитектуру с 16-битными целыми числами, но с 32-битным адресным пространством.)