Причина Вы не можете расширить Перечисления, состоит в том, потому что она привела бы к проблемам с полиморфизмом.
Говорят, что Вы имеете перечислимый MyEnum со значениями A, B, и C, и расширяете его с помощью значения D как MyExtEnum.
предположим метод ожидает значение myEnum где-нибудь, например, в качестве параметра. Должно быть законно предоставить значение MyExtEnum, потому что это - подтип, но теперь что Вы собираетесь сделать, когда это складывается, значение является D?
Для устранения этой проблемы расширение перечислений недопустимо
Цитирование стандарта дает то, что определено как «правильный ответ», но на самом деле это не отражает как обычно пишутся программы.
Люди все время делают предположения, что char - это 8 бит, short - 16, int - 32, long - 32 или 64, а long long - 64.
Эти предположения - не лучшая идея, но вас не уволят за их принятие.
Теоретически
может использоваться для указания типов с фиксированной разрядностью, но вам нужно найти его для Microsoft. ( См. Здесь MS stdint.h .) Одна из проблем здесь состоит в том, что C ++ технически нуждается только в совместимости с C89, чтобы быть соответствующей реализацией; даже для простого C C99 не поддерживается полностью даже в 2009 году.
Также неверно сказать, что для char
нет спецификации ширины. Да, в стандарте просто не говорится, подписан он или нет. Вот что на самом деле говорит C99: