...one of the most highly
regarded and expertly designed C++ library projects in the
world.
— Herb Sutter and Andrei
Alexandrescu, C++
Coding Standards
The header
provides the typedef's useful for writing portable code that requires certain
integer widths. All typedef's are in namespace boost.
The specifications for these types are based on the ISO/IEC 9899:1999 C Language
standard header long long
is not [yet] included in the C++ standard.
See cstdint_test.cpp for a test program.
The organization of the Boost.Integer headers and classes is designed to
take advantage of boost
without placing any names in namespace
std
. The intension is to complement rather than compete
with the C++ Standard Library. Should some future C++ standard include
Because these are boost headers, their names conform to boost header naming conventions rather than C++ Standard Library header naming conventions.
As an implementation artifact, certain C boost::integer_traits<>
or std::numeric_limits<>
instead.
As another implementation artifact, certain C boost
instead.
The typedef int#_t
, with # replaced by the width, designates
a signed integer type of exactly # bits; for example int8_t
denotes an 8-bit signed integer type. Similarly, the typedef uint#_t
designates an unsigned integer type of exactly # bits.
These types are optional. However, if a platform supports integer types with
widths of 8, 16, 32, 64, or any combination thereof, then
The absence of int64_t and uint64_t is indicated by the macro BOOST_NO_INT64_T
.
The typedef int_least#_t
, with # replaced by the width,
designates a signed integer type with a width of at least # bits, such that
no signed integer type with lesser size has at least the specified width.
Thus, int_least32_t
denotes the smallest signed integer
type with a width of at least 32 bits. Similarly, the typedef name uint_least#_t
designates an unsigned integer type with a width of at least # bits, such
that no unsigned integer type with lesser size has at least the specified
width.
The following minimum-width integer types are provided for all platforms:
int_least8_t
int_least16_t
int_least32_t
uint_least8_t
uint_least16_t
uint_least32_t
The following types are available only if, after including
int_least64_t
uint_least64_t
All other minimum-width integer types are optional.
The typedef int_fast#_t
, with # replaced by the width,
designates the fastest signed integer type with a width of at least # bits.
Similarly, the typedef name uint_fast#_t
designates the
fastest unsigned integer type with a width of at least # bits.
There is no guarantee that these types are fastest for all purposes. In any case, however, they satisfy the signedness and width requirements.
The following fastest minimum-width integer types are provided for all platforms:
int_fast8_t
int_fast16_t
int_fast32_t
uint_fast8_t
uint_fast16_t
uint_fast32_t
The following types are available only if, after including
int_fast64_t
uint_fast64_t
All other fastest minimum-width integer types are optional.
The typedef intmax_t
designates a signed integer type
capable of representing any value of any signed integer type.
The typedef uintmax_t
designates an unsigned integer type
capable of representing any value of any unsigned integer type.
These types are provided for all platforms.
The following macros are always defined after inclusion of this header, these allow integer constants of at least the specified width to be declared: INT8_C, UINT8_C, INT16_C, UINT16_C, INT32_C, UINT32_C, INTMAX_C, UINTMAX_C.
The macros INT64_C and UINT64_C are also defined if the the macro BOOST_NO_INT64_T is not defined.
The C99 macro __STDC_CONSTANT_MACROS is also defined as an artifact of the implementation.
For example:
#include <boost/cstdint.hpp> // Here the constant 0x1FFFFFFFF has the correct suffix applied: static const boost::uint64_t c = INT64_C(0x1FFFFFFFF);
The typedefs intptr_t
and uintptr_t
defined signed and unsigned integers respectively each capable of storing
a pointer. The macro BOOST_HAS_INTPTR_T
is set when these
types are available.