В настоящее время я перерабатываю некоторые виды использования unsigned int
to size_t
в моей кодовой базе, которую я разрабатывал на протяжении многих лет. Я понимаю, что разница между двумя и тем, например, unsigned int
может быть 32-битной, а указатели и size_t
могут быть 64-битными. Мой вопрос - это больше о том, где я должен использовать один из них и что люди используют для выбора между ними.
Совершенно очевидно, что в качестве аргумента распределение памяти должно принимать size_t
вместо unsigned int
, или что классы-контейнеры должны использовать size_t
для размера и индексирования, как в STL. Это распространенные случаи, связанные с чтением преимуществ size_t
vs unsigned int
. Однако, работая над преобразованием базы кода, я наткнулся на довольно много случаев в серых областях, где я не уверен, какой из них использовать. Например, если индекс строки/столбца матрицы 4x4 должен быть size_t
для согласованности, независимо от индекса, находящегося в диапазоне [0, 3], или если разрешение экрана/текстуры должно использовать size_t
, несмотря на то, что оно находится в диапазоне нескольких тысяч или в если разумное число объектов должно находиться в диапазоне десятков, я должен использовать size_t
для согласованности.
Какие соглашения о кодировании вы используете для выбора между unsigned int
и size_t
? Должно ли все, что представляет размер (в байтах или объектах), или индекс всегда size_t
независимо от разумно ожидаемого диапазона? Существует ли общепринятое соглашение size_t
, используемое в хорошо зарекомендовавших себя библиотеках, которые я мог бы выполнить?