AUTOSAR C++14 Rule 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