Re: Гарантии sizeof(char, short, int, long)
Здравствуйте, Ignoramus, Вы писали:
I>Читаю у Страуструпа (Язык программирования С++, спец. Издание), раздел 4.6. Размеры, стр. 113:
I>I>По поводу размеров фундаментальных типов гарантируется следующее:
I>1 == sizeof(char) <= sizeof(short) <= sizeof(int) <= sizeof(long)
I>… [skipped]
I>Кроме того гарантируется, что для представления char используется по меньшей мере 8 бит, для представления short – по меньшей мере 16 бит и для long – по меньшей мере 32 бита
I>Конечно, Бьярн солидный авторитет в этих вопросах, но я перерыл весь стандарт и там насчет столь конкретного минимального размера в битах ничего не сказано. Лишь для char сказано что он должен быть достаточно большим чтобы уместить все необходимые для самого языка символы.
I>Так все-таки гарантируется (выделенное) или нет?
I>Я пишу переносимый класс, который осуществляет некоторые манипуляции с битами и зависит от размеров фундаментальных типов данной платформы. Однако мне нужно гарантировать, что у передаваемых на вход функций параметров (как раз!) char >= 8 бит, short >= 16 бит, long >= 32 бит. Могу ли я на это рассчитывать?
I>А если не могу, какой можно придумать портабельный код, который бы по-прежнему корректно работал?
I>Например, если мне нужно передать на вход не менее чем 32-битное целое, как мне лучше всего поступить? Пока в голову приходит std::bitset или void* + bitCount, но это мрачновато, очень уж не хочется отказываться от такой простой и удобной вещи как передача параметра long .
Может подойдут enum'ы? Для
enum e {a = 255};
размер целого которым он представлен >= 8 бит.
The last good thing written in C was Franz Schubert's Symphony No. 9.