Для каждого скаляра `T` существует ли гарантия, что существует целое число одинакового размера?

Если T является скалярным типом, и N = CHAR_BIT * sizeof(T), является uintN_t гарантированно существует? Если нет, верно ли это в большинстве случаев, но с несколькими исключительными типами случаев? ( long doubleи указатели на функции-члены приходят на ум. )

Для справки:

  • intN_t, uintN_t

    • N1548 §7.20.1.1 :3: «Эти типы являются необязательными. Однако, если реализация предоставляет целочисленные типы с шириной 8, 16, 32 или 64 бита, без битов заполнения и (для типов со знаком), которые имеют два дополнить представление, оно должно определить соответствующие имена typedef. «
  • scalar types

    • N3242 §3.9 ¶9: «Арифметические типы, типы перечисления, типы указателей, указатель на типы элементов, станд :: nullptr_t, и cv-квалифицированные версии этих типов все вместе называются скалярные типы

1

Решение

Типы uintX_t являются необязательными, поэтому нет никакой гарантии, что в вашей реализации они вообще будут. Кроме этого, нет точного определения того, что скаляр значит для вас.

3

Другие решения

Многие процессоры и / или компиляторы реализуют long double типы больше, чем любой целочисленный тип, независимо от имени, и есть процессоры с 32 байтовые указатели.

Так что нет.

1

По вопросам рекламы [email protected]