Подтвердить что ты не робот

Стандарт С++ гарантирует, что std:: uintmax_t может хранить все значения std:: size_t?

Предоставляет ли стандарт С++ (либо явно указывая или неявно логическим выводом), что std::uintmax_t может содержать все значения std::size_t?

Или возможно, что std::numeric_limits<std::size_t>::max() будет больше, чем std::numeric_limits<std::uintmax_t>::max()?

4b9b3361

Ответ 1

Да.

size_t определяется как целочисленный тип без знака, достаточно большой, чтобы содержать размер любого объекта. uintmax_t определяется как способное хранить любое значение любого беззнакового целочисленного типа. Поэтому, если size_t может сохранить его, uintmax_t может его сохранить.

Определение size_t из С++ 11 §18.2:

Тип size_t представляет собой целочисленный тип без знака, определенный для реализации, который достаточно велик, чтобы содержать размер в байтах любого объекта.

Определение uintmax_t из C99 §7.18.1.5 (оно включено в С++ по нормативной ссылке):

Следующий тип обозначает целочисленный тип без знака, способный представлять любое значение любого беззнакового целочисленного типа:

uintmax_t