Вопросы про enum в C и C++

Я пытаюсь понять различия в семантике enum между C и C++.

Скажите, пожалуйста, какие их следующих моих предположений верны, а какие нет, и почему:

1) В языке C тип enum гарантированно имеет фиксированный нижележащий тип (зависит от реализации). Следовательно, мы получаем соответствующие гарантии. Например, гарантии по размеру. К примеру, при экспорте из DLL функции, аргумент которой имеет тип enum, мы можем гарантировать, что вызывающая сторона может работать с таким аргументом как с обычным int (зависит от реализации).

2) В языке C++ переменная типа enum не имеет фиксированного нижележащего типа, если он не указан явно. Если верить Стандарту, то при отсутствии явного задания нижележащего типа для enum компилятор имеет полное право использовать такое количество битов, которое необходимо и достаточно для хранения только определенных (имеющихся, существующих) перечислителей перечисления.

3) C++ запрещает преобразование (при помощи static_cast) в enum (без указанного нижележащего типа), если исходная величина не может быть представлена в диапазоне возможных значений указанного перечисления.

4) C позволяет преобразование между любыми перечислениями, потому что все перечисления имеют одинаковый нижележащий тип.


Ответы (0 шт):