Пространства имён
Варианты
Действия

enumeration declaration

Материал из cppreference.com
< cpp‎ | language

 
 
Язык С++
Общие темы
Управление программой
Операторы условного выполнения
Операторы повторения
Операторы перехода
Функции
объявление функции
объявление лямбда-функции
шаблон функции
спецификатор inline
спецификаторы исключений (устарело)
спецификатор noexcept (C++11)
Исключения
Пространства имён
объявление пространства имён
псевдонимы пространства имён
Типы
спецификатор decltype (C++11)
Спецификаторы
cv-спецификаторы
спецификаторы продолжительности хранения
спецификатор constexpr (C++11)
спецификатор auto (C++11)
спецификатор alignas (C++11)
Инициализация
Литералы
Выражения
Утилиты
Типы
typedef-объявление
объявление псевдонима типа (C++11)
атрибуты (C++11)
Приведения типов
неявные преобразования
const_cast-преобразование
static_cast-преобразование
dynamic_cast-преобразование
reinterpret_cast-преобразование
C-подобное и функциональное приведение типов
Выделение памяти
Классы
Особые свойства классовых функций
Специальные функции-члены
Шаблоны
шаблон класса
шаблон функции
специализация шаблона
упакованные параметры (C++11)
Разное
Ассемблерные вставки
 
Перечисление представляет собой особый тип, значение которой ограничивается одним из нескольких явно именованные константы ("счетчики"). Значения констант значения интегрального типа, известного как базовый тип перечисления.
Оригинал:
An enumeration is a distinct type whose value is restricted to one of several explicitly named constants ("enumerators"). The values of the constants are values of an integral type known as the underlying type of the enumeration.
Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
enum name : type attr { enumerator = constexpr , enumerator = constexpr , ... None} (1)
enum class name : type attr { enumerator = constexpr , enumerator = constexpr , ... None} (2) (начиная с C++11)
enum struct name : type attr { enumerator = constexpr , enumerator = constexpr , ... None} (3) (начиная с C++11)
1)
заявляет незаданной типа перечисления. Каждый enumerator становится доступным в окружающем сферу, и неявно, конвертируемых в интегрального типа, в том числе bool. Если прямо не указано, базовый тип является неотъемлемой тип, способный представлять все значения счетчиков, которые не могут быть шире, чем int если некоторые constexpr оценивается как константа, которая не вписывается в int
Оригинал:
declares an unscoped enumeration type. Each enumerator becomes accessible in the enclosing scope, and is implicitly-convertible to integral type, including bool. If not explicitly specified, the underlying type is an integral type capable of representing all enumerator values, which cannot be wider than int unless some constexpr evaluates to a constant that does not fit in an int
Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
2-3)
объявляет областью типа перечисления. Каждый enumerator могут быть доступны только в качестве name::enumerator. Преобразование целых типов можно с static_cast. Если не указан явно, основной тип int.
Оригинал:
declares a scoped enumeration type. Each enumerator can only be accessed as name::enumerator. Conversion to integral types is possible with static_cast. If not explicitly specified, the underlying type is int.
Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.

[править] Объяснение

name -
Имя типа, объявленные это заявление. Незаданной перечисления могут быть безымянными, в этом случае он только вводит перечислитель имена, как постоянные, но не новый тип
Оригинал:
the name of the type declared by this declaration. An unscoped enumeration may be nameless, in which case it only introduces enumerator names as constants, but no new type
Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
type(C++11) -
дополнительного интегрального типа (любого сорта квалификации игнорируется), используемый в качестве базового типа перечисления .
Оригинал:
optional integral type (any cv-qualification is ignored), used as the underlying type of the enumeration.
Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
attr(C++11) -
ноль или более конкретной реализации атрибутов формы [[attribute]]
Оригинал:
zero or more implementation-specific attributes of the form [[attribute]]
Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
enumerator -
ноль или более счетчиков, которые вводятся этим заявлением. Имена счетчики могут быть использованы в любом константы не ожидается
Оригинал:
zero or more enumerators which are introduced by this declaration. The names of the enumerators may be used anywhere constants are expected
Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
constexpr -
дополнительное постоянное выражение, которое вычисляет значение, которое будет назначен на перечислитель. Если он опущен, значение значением предыдущего счетчика плюс 1. Если опускается для первого счетчика, значение 0
Оригинал:
optional constant expression which evaluates to the value to be assigned to the enumerator. If it is omitted, the value is the value of the previous enumerator plus 1. If omitted for the first enumerator, the value is 0
Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.

[править] Пример

#include <iostream>
// color may be red (value 0), yellow (value 1), green (value 20), or blue (value 21)
enum color {
    red,
    yellow,
    green = 20,
    blue
};
// altitude may be altitude::high or altitude::low
enum class altitude : char {
     high='h',
     low='l', // C++11 allows the extra comma
};
// the constant d is 0, the constant e is 1, the constant f is 3
enum { d, e, f=e+2 };
int main()
{
    color col = red;
    altitude a;
    a = altitude::low;
 
    std::cout << "red = " << col << " blue = " << blue << '\n'
              << "a = " << static_cast<char>(a) << '\n'
              << "f = " << f << '\n';
}

Вывод:

red = 0 blue = 21
a = l
f = 3