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