Die Bibliothek Boost.Integer bietet eine Headerdatei boost/cstdint.hpp an, die spezialisierte Typen für Ganzzahlen definiert. Diese Definitionen stammen aus dem Standard C99. Es handelt sich hierbei um die 1999 verabschiedete Version des Standards zur Programmiersprache C. Da die erste Version des C++-Standards 1998 veröffentlicht wurde, fehlten die in C99 definierten Typen für Ganzzahlen im C++-Standard.
C99 definiert die Typen, die Sie im Folgenden kennenlernen werden, in der Headerdatei stdint.h. Diese Headerdatei wurde in C++11 übernommen. In C++ heißt sie cstdint. Wenn Ihre Entwicklungsumgebung C++11 unterstützt, können Sie auf cstdint zugreifen und müssen boost/cstdint.hpp nicht verwenden.
#include <boost/cstdint.hpp>
#include <iostream>
int main()
{
boost::int8_t i8 = 1;
std::cout << sizeof(i8) << '\n';
#ifndef BOOST_NO_INT64_T
boost::uint64_t ui64 = 1;
std::cout << sizeof(ui64) << '\n';
#endif
boost::int_least8_t il8 = 1;
std::cout << sizeof(il8) << '\n';
boost::uint_least32_t uil32 = 1;
std::cout << sizeof(uil32) << '\n';
boost::int_fast8_t if8 = 1;
std::cout << sizeof(if8) << '\n';
boost::uint_fast16_t uif16 = 1;
std::cout << sizeof(uif16) << '\n';
}Die in boost/cstdint.hpp definierten Typen stehen im Namensraum boost zur Verfügung. Die Typen lassen sich in drei Kategorien einteilen:
Typen wie boost::int8_t und boost::uint64_t tragen die exakte Speichergröße im Namen. Während boost::int8_t aus genau 8 Bits besteht, belegt boost::uint64_t genau 64 Bits.
Typen wie boost::int_least8_t und boost::uint_least32_t bestehen aus mindestens so vielen Bits wie im Namen enthalten. So ist es möglich, dass die Speichergröße von boost::int_least8_t bei mehr als 8 Bits und von boost::uint_least32_t bei mehr als 32 Bits liegt.
Typen wie boost::int_fast8_t und boost::uint_fast16_t legen ebenfalls eine Mindestgröße fest. Ihre tatsächliche Speichergröße ist so gesetzt, dass Variablen dieser Typen schnell verarbeitet werden können. So gibt Beispiel 57.1 mit Visual C++ 2013 auf einem 64-Bit Windows 7-System erstellt für sizeof(uif16) 4 aus.
Beachten Sie, dass 64-Bit-Typen nicht auf allen Plattformen zur Verfügung stehen. Sie können über das Makro BOOST_NO_INT64_T feststellen, ob 64-Bit-Typen fehlen.
#include <boost/cstdint.hpp>
#include <iostream>
int main()
{
boost::intmax_t imax = 1;
std::cout << sizeof(imax) << '\n';
std::cout << sizeof(UINT8_C(1)) << '\n';
#ifndef BOOST_NO_INT64_T
std::cout << sizeof(INT64_C(1)) << '\n';
#endif
}Boost.Integer definiert mit boost::intmax_t und boost::uintmax_t zwei Typen, mit denen die größtmöglichen Ganzzahlen gespeichert werden können. boost::intmax_t und boost::uintmax_t basieren auf den größtmöglichen primitiven Typen, die auf einer Plattform zur Verfügung stehen. Wird Beispiel 57.2 mit Visual C++ 2013 kompiliert auf einem 64-Bit Windows 7-System ausgeführt, gibt sizeof(imax) 8 aus. Der größte Typ für Ganzzahlen belegt demnach 64 Bits.
Boost.Integer stellt außerdem Makros zur Verfügung, um Ganzzahlen als Literale mit bestimmten Typen zu verwenden. Wird in C++-Quellcode eine Ganzzahl niedergeschrieben, hat diese standardmäßig den Typ int und belegt mindestens 4 Bytes. Makros wie UINT8_C und INT64_C ermöglichen es, eine Mindestgröße für eine Ganzzahl als Literal anzugeben. Beispiel 57.2 gibt für sizeof(UINT8_C(1)) mindestens 1 und für sizeof(INT64_C(1)) mindestens 8 aus.
Boost.Integer bietet neben boost/cstdint.hpp weitere Headerdateien an. Diese stellen vorwiegend Klassen zur Verfügung, wie sie zur Template-Metaprogrammierung eingesetzt werden.