size_t
является неподписанным типом. Таким образом, он не может представлять никаких отрицательных значений (& lt; 0). Вы используете его, когда считаете что-то, и уверены, что он не может быть отрицательным. Например, strlen()
возвращает size_t
, поскольку длина строки должна быть не менее 0.
В вашем примере, если ваш индекс цикла будет всегда больше 0, может иметь смысл использовать size_t
или любой другой неподписанный тип данных.
Когда вы используете объект size_t
, вы должны убедиться, что во всех контекстах это используется, включая арифметику, вы хотите неотрицательные значения. Например, предположим, что у вас есть:
size_t s1 = strlen(str1);
size_t s2 = strlen(str2);
, и вы хотите найти разницу в длинах str2
и str1
. Вы не можете делать:
int diff = s2 - s1; /* bad */
Это связано с тем, что значение, назначенное diff
, всегда будет положительным числом, даже когда s2 < s1
, потому что вычисление выполняется с неподписанными типами. В этом случае, в зависимости от вашего варианта использования, вам может быть лучше использовать int
(или long long
) для s1
и s2
.
В C / POSIX, который мог / должен использовать size_t
, но не из-за исторических причин. Например, второй параметр fgets
в идеале должен быть size_t
, но есть int
.