Гарантии sizeof(char, short, int, long)
От: Ignoramus  
Дата: 24.10.05 06:03
Оценка:
Читаю у Страуструпа (Язык программирования С++, спец. Издание), раздел 4.6. Размеры, стр. 113:

По поводу размеров фундаментальных типов гарантируется следующее:

1 == sizeof(char) <= sizeof(short) <= sizeof(int) <= sizeof(long)
… [skipped]

Кроме того гарантируется, что для представления char используется по меньшей мере 8 бит, для представления short – по меньшей мере 16 бит и для long – по меньшей мере 32 бита


Конечно, Бьярн солидный авторитет в этих вопросах, но я перерыл весь стандарт и там насчет столь конкретного минимального размера в битах ничего не сказано. Лишь для char сказано что он должен быть достаточно большим чтобы уместить все необходимые для самого языка символы.

Так все-таки гарантируется (выделенное) или нет?

Я пишу переносимый класс, который осуществляет некоторые манипуляции с битами и зависит от размеров фундаментальных типов данной платформы. Однако мне нужно гарантировать, что у передаваемых на вход функций параметров (как раз!) char >= 8 бит, short >= 16 бит, long >= 32 бит. Могу ли я на это рассчитывать?

А если не могу, какой можно придумать портабельный код, который бы по-прежнему корректно работал?

Например, если мне нужно передать на вход не менее чем 32-битное целое, как мне лучше всего поступить? Пока в голову приходит std::bitset или void* + bitCount, но это мрачновато, очень уж не хочется отказываться от такой простой и удобной вещи как передача параметра long .
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.