exponenta event banner

Правило AUTOSAR C++ 14 A7-2-2

Базовый тип перечисления должен быть определен явным образом

Описание

Определение правила

Базовый тип перечисления должен быть определен явным образом.

Объяснение

В объявлении перечисления без области действия, например:

enum someEnum : type { ... }

если : type опущен, базовый тип определен для реализации (с единственным требованием, согласно которому тип должен соответствовать всем значениям перечисления). Отсутствие объявления базового типа явно приводит к поведению, определяемому реализацией.

В объявлении перечисления области, например:

enum class someEnum : type { ... }

если : type опущен, базовым типом является int. Если значение перечисления превышает допустимые значения для int, вы видите ошибки компиляции.

Как для перечислений без области действия, так и для перечислений с областью действия объявите базовый тип явно, чтобы избежать поведения, определяемого реализацией, или ошибок компиляции.

Поиск неисправностей

Если вы ожидаете нарушения правила, но не видите его, обратитесь к разделу Нарушения стандартов кодирования не отображаются.

Примеры

развернуть все

#include <cstdint>

enum E1 { //Noncompliant unscoped enum
    E10,
    E11,
    E12
};

enum E2 : std::uint8_t { //Compliant unscoped enum
    E20,
    E21,
    E22
};

enum class E3 { //Noncompliant scoped enum
    E30,
    E31,
    E32
};

enum class E4 : std::uint8_t { //Compliant scoped enum
    E40,
    E41,
    E42
};

В этом примере код является несоответствующим, если нижележащие типы перечислений опущены.

Проверить информацию

Группа: Объявление
Категория: Обязательно, Автоматизировано
Представлен в R2019b