Постановка задачи
Любой, кто сталкивался с программированием для Windows API, обнаруживал странные типы ULONG, DWORD и так далее, которые фигурируют в разных функциях API там и сям. Надо иметь достаточно долгий опыт программирования под Windows, чтобы знать один простой факт: необходимость в этом мусоре (а как еще назвать введение в глобальное пространство имен неких типов, необходимость которых там сомнительна?) возникла после перехода от 16-разрядного API MS Windows 3.1 к 32-разрядному API Windows NT 3.1.
Сейчас, когда крайне малый процент разработчиков продолжает поддержку 16-разрядных программ, кажется странным оперировать синонимами для целочисленных типов.
Есть, однако, случаи, когда объявления переменной типа int или long слишком неопределенно - это низкоуровневое программирование, либо случаи, когда выполняется разрабатываемая программа оперирует таким большим объемом данных, что программист хочет точно определится с размером структур данных. Стандарт C/C++ оставляет такие вопросы, как размер типа int, на откуп разработчиков компиляторов, поэтому лишь крайне наивный программист может считать, что short int это всегда 16-битовое целое. К примеру, компилятор GNU GCC определяет тип wchar_t как 4-байтовое, а подавляющее большинство компиляторов для платформы Windows - как 16-битовое.
Про знаковые/беззнаковые символьные типы знает гораздо больше программистов - это постоянный источник ошибок, стоит только попробовать использовать код символа в качестве индекса для доступа к элементам массива.
Решение
Библиотека BOOST C++ предлагает простое (для нас, пользователей этой замечательной библиотеки) решение - оно запрятано в подбиблиотеке с незамысловатым названием integer. Включив в программу заголовочный файл <boost/cstdint.hpp>, можно использовать следующие типы:
Беззнаковые:
boost::uint8_t
boost::uint16_t
boost::uint32_t
Знаковые:
boost::int8_t
boost::int16_t
boost::int32_t
© Mental Computing 2010