Лекции (13) (1119484), страница 2
Текст из файла (страница 2)
Для этого надо использовать объявление enum class(или, как синоним, enum struct). Например,enum class E { V1, V2, V3 = 100, V4 /*101*/};Элементы такого перечисления нельзя неявно преобразовать вцелые числа (выражение Е:: V4 == 101 приведет к ошибкекомпиляции).19Введение в С++11Перечисления со строгой типизацией.В С++11 тип констант перечислимого типа не обязательно int (только поумолчанию), его можно задать явно следующим образом:enum class E2 : unsigned int { V1, V2 };// значение Е2:: V1 определено, а V1 – не определено.Или:enum E3 : unsigned long { V1 = 1, V2 };// в целях обеспечения обратной совместимости определены и значениеЕ3:: V1 , и V1.В С++11 возможно предварительное объявление перечислений, нотолько если указан размер перечисления (явно или неявно):enum E1;// Err: низлежащий тип не определенenum E2 : unsigned int;// OK!enum class E3 ;// OK: низлежащий тип intenum class E4 : unsigned long;// ОК!enum E2 : unsigned short;// Err: Е2 ранее объявлен// с другим низлежащим типом.20Введение в С++11sizeof для членов данных классовбез создания объектов.В С++11 разрешено применять операцию sizeof кчленам-данным классов независимо от объектовклассов.Пример:struct A {some_type a;};...
sizeof (A::a) ... // OK!Кроме того, в С++11 узаконен тип long long int .21.