![]() |
Home | Libraries | People | FAQ | More |
The header <boost/cstdint.hpp>
provides the typedef's useful for writing portable code that requires certain
integer widths. All typedef's are in namespace boost.
The specifications are based on the ISO/IEC 9899:1999 C Language standard
header <stdint.h>. The 64-bit types required by the C standard are
not required in the boost header, and may not be supplied in all implementations,
because 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 <stdint.h> types from the 1999 C standard without
resorting to undefined behavior in terms of the 1998 C++ standard. The header
<boost/cstdint.hpp> makes the standard integer types safely available
in namespace boost
without placing any names in namespace
std
. As always, the intension is to complement rather
than compete with the C++ Standard Library. Should some future C++ standard
include <stdint.h> and <cstdint>, then <boost/cstdint.hpp>
will continue to function, but will become redundant and may be safely deprecated.
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 <limits.h> macro names may
possibly be visible to users of <boost/cstdint.hpp>. Don't use these
macros; they are not part of any Boost-specified interface. Use boost::integer_traits<>
or std::numeric_limits<>
instead.
As another implementation artifact, certain C <stdint.h> typedef names
may possibly be visible in the global namespace to users of <boost/cstdint.hpp>.
Don't use these names, they are not part of any Boost-specified interface.
Use the respective names in namespace 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 an implementation provides integer types with widths of 8, 16, 32, or 64 bits, it shall define the corresponding typedef names.
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 a 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.
Required minimum-width integer types:
int_least8_t
int_least16_t
int_least32_t
uint_least8_t
uint_least16_t
uint_least32_t
The types:
int_least64_t
uint_least64_t
Are available only if, after inclusion of <boost/cstdint.hpp>
the macro BOOST_NO_INT64_T
is not defined.
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.
Required fastest minimum-width integer types:
int_fast8_t
int_fast16_t
int_fast32_t
uint_fast8_t
uint_fast16_t
uint_fast32_t
The types:
int_fast64_t
uint_fast64_t
Are available only if, after inclusion of <boost/cstdint.hpp>
the macro BOOST_NO_INT64_T
is not defined.
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 required.