Это хорошая практика для использования станд.:: size_t повсеместно? [дубликат]

6
задан Community 23 May 2017 в 12:11
поделиться

3 ответа

std::size_t - это тип, который используется для подсчета мест в памяти, например, длины массива, размера объектов и т.д. Контейнеры STL используют container_type::size_type, который обычно отображается на std::size_t, но это не гарантировано.

Если вам нужны типы для хранения неотрицательных интегралов, которые не используются для вышеуказанных целей, то чем плохи unsigned short, unsigned int и unsigned long?

.
8
ответ дан 8 December 2019 в 18:32
поделиться

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.

3
ответ дан 8 December 2019 в 18:32
поделиться

Вы можете использовать size_t для переменных, которые представляют размеры объектов, хранящихся в памяти. Но нет особых причин использовать его для чего-то еще. Он существует главным образом потому, что unsigned int может быть недостаточно широким, чтобы представить размер объекта памяти. (Рассмотрим архитектуру с 16-битными целыми числами, но с 32-битным адресным пространством.)

2
ответ дан 8 December 2019 в 18:32
поделиться
Другие вопросы по тегам:

Похожие вопросы: