Назначение size_t, когда int меньше, чем size_t - PullRequest
0 голосов
/ 23 февраля 2019

Рассмотрим этот код:

size_t s = 100000;

Что произойдет, если на платформе, где он скомпилирован, тип данных int имеет ширину 16 бит, а size_t - 32 бит?Будет ли переменная s содержать значение 100000?Или 100000 будет считаться целым числом, что приведет к переполнению 16-битного диапазона, что приведет к неопределенному поведению и неопределенному значению до s?

1 Ответ

0 голосов
/ 23 февраля 2019

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

Такотносительный размер int и size_t на самом деле не имеет отношения к тому, что происходит в вашем вопросе.Пока существует некоторый тип со знаком, в котором может быть представлено 100000 (и C гарантирует, что; long должен иметь как минимум 32-битный диапазон), литерал имеет правильное значение.Если size_t достаточно велико, чтобы представить это, результирующее значение в s будет равно 100000. Если size_t меньше, значение будет уменьшено по модулю SIZE_MAX + 1.

...