Недавно я узнал, что size_t был введен для того, чтобы помочь будущему кодексу увеличить количество бит и увеличить доступную память. Специфическое определение использования, по-видимому, заключается в хранении размера чего-либо, как правило, массива.
Теперь я должен задаться вопросом, как далеко следует провести эту будущую проверку. Разумеется, бессмысленно иметь длину массива, определенную с использованием будущего размера и размера size_t, если в следующей задаче итерации по массиву используется unsigned int
как индексный массив:
void (double* vector, size_t vectorLength) {
for (unsigned int i = 0; i < vectorLength; i++) {
//...
}
}
Фактически в этом случае я мог бы ожидать, что синтаксис должен строго преобразовать беззнаковый int в size_t для оператора отношений.
Означает ли это, что переменная итератора i
должна быть просто size_t
?
Означает ли это, что любое целое число в любой программе должно быть функционально идентифицировано относительно того, будет ли оно когда-либо использоваться как индекс массива?
Означает ли это, что любой код, использующий логику, которая разрабатывает индекс программно, должен затем создать новое значение результата типа size_t, особенно если логика основана на потенциально значащих целочисленных значениях? то есть.
double foo[100];
//...
int a = 4;
int b = -10;
int c = 50;
int index = a + b + c;
double d = foo[(size_t)index];
Конечно, хотя, поскольку моя логика кода создает фиксированную привязку, преобразование с повышением уровня в size_t не обеспечивает дополнительной защиты.