Заголовок
обеспечивает полезную для написания портативного кода функцию typedef, требующую определенной ширины целого числа. Все типдефы в пространстве имен.
Спецификации для этих типов основаны на стандарте ISO/IEC 9899:1999 C Language header . 64-разрядные типы, требуемые стандартом C, не требуются в заголовке бустера и могут не поставляться для всех платформ / компиляторов, поскольку длинное
еще не включено в стандарт C++.
См. cstdint_test.cpp для тестовой программы.
Организация Роста. Целые заголовки и классы предназначены для использования типов из стандарта 1999 C, не вызывая неопределенного поведения с точки зрения стандарта 1998 C++. Заголовок делает стандартные целочисленные типы безопасными в пространстве имен boost
без размещения имен в пространстве имен std
. Цель состоит в том, чтобы дополнить, а не конкурировать со стандартной библиотекой C++. Если какой-то будущий стандарт C++ включает и , то продолжит функционировать, но станет избыточным и может быть безопасно обесценен.
Поскольку это заголовки ускорения, их имена соответствуют соглашениям об именах заголовков ускорения, а не C++. Стандартные библиотечные соглашения об именах.
В качестве артефакта реализации некоторые C макро-имена могут быть видны пользователям Не используйте эти макросы; они не являются частью какого-либо интерфейса. Используйте boost::integer_traits<>
или std::numeric_limits<>
.
В качестве другого артефакта реализации некоторые имена C typedef могут быть видны в глобальном пространстве имен пользователям Не используйте эти имена, они не являются частью интерфейса Boost. Вместо этого используйте соответствующие имена в пространстве имен boost
.
Typedef int#_t
, с # замененным на ширину, обозначает подписанный целочисленный тип точно # битов; например, int8_t
обозначает 8-битный подписанный целочисленный тип. Аналогично, typedef uint#_t
обозначает неподписанный целочисленный тип именно битов #.
Эти типы являются факультативными. Однако, если платформа поддерживает целые типы с шириной 8, 16, 32, 64 или любую их комбинацию, тогда предоставляет соответствующие типдефы.
Отсутствие int64_t и uint64_t указывается макросом. BOOST_NO_INT64_T
.
Typedef int_least#_t
, с #заменой на ширину, обозначает подписанный целочисленный тип с шириной по меньшей мере битов #, так что ни один подписанный целочисленный тип с меньшим размером не имеет по меньшей мере указанной ширины. Таким образом, int_least32_t
обозначает наименьший подписанный целочисленный тип шириной не менее 32 бит. Аналогично, имя typedef uint_least#_t
обозначает неподписанный целочисленный тип с шириной по меньшей мере битов #, так что ни один неподписанный целочисленный тип с меньшим размером не имеет по меньшей мере указанной ширины.
Для всех платформ предусмотрены следующие типы целых чисел минимальной ширины:
int_east8_t
int_east16_t
int_east32_t
uint_east8_t
uint_east16_t
uint_east32_t
Следующие типы доступны только после включения , макрос BOOST_NO_INT64_T не определяется:
int_east64_t
uint_east64_t
Все остальные целочисленные типы минимальной ширины являются необязательными.
Typedef int_fast#_t
, с #заменой на ширину, обозначает самый быстрый подписанный целочисленный тип с шириной не менее # битов. Аналогично, имя typedef uint_fast#_t
обозначает самый быстрый неподписанный целочисленный тип с шириной по меньшей мере битов #.
Нет никакой гарантии, что эти типы являются самыми быстрыми для всех целей. В любом случае, однако, они удовлетворяют требованиям подписи и ширины.
Для всех платформ предусмотрены следующие самые быстрые типы целочисленных чисел минимальной ширины:
int_fast8_t
int_fast16_t
int_fast32_t
uint_fast8_t
uint_fast16_t
uint_fast32_t
Следующие типы доступны только после включения , макрос BOOST_NO_INT64_T не определяется:
int_fast64_t
uint_fast64_t
Все остальные самые быстрые целочисленные типы минимальной ширины являются необязательными.
Typedef intmax_t
обозначает подписанный целочисленный тип, способный представлять любое значение любого подписанного целочисленного типа.
Typedef uintmax_t
обозначает неподписанный целочисленный тип, способный представлять любое значение любого неподписанного целочисленного типа.
Эти типы предусмотрены для всех платформ.
После включения этого заголовка всегда определяются следующие макросы, которые позволяют объявить целые константы по меньшей мере указанной ширины: INT8_C, UINT8_C, INT16_C, UINT16_C, INT32_C, UINT32_C, INTMAX_C, UINTMAX_C.
Макросы INT64_C и UINT64_C также определены, если макрос BOOST_NO_INT64_T не определен.
C99 macro __STDC_CONSTANT_MACROS также определяется как артефакт реализации.
Например:
#include <boost/cstdint.hpp>
static const boost::uint64_t c = INT64_C(0x1FFFFFFFF);