AUTOSAR C++14 Rule A7-2-3

Перечисления должны быть объявлены как отсчитываемые классы перечисления

Описание

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

Перечисления должны быть объявлены как перечисленные классы перечислений.

Объяснение

Значения перечисления в неотключенном перечислении могут конфликтовать с другими идентификаторами в тех же возможностях, что и перечисление, и вызывать ошибки компиляции. Для образца:

enum E: std::int32_t { E0, E1};
std::int32_t E0;

Если вы охватываете перечисление, таких конфликтов можно избежать. Для образца:

enum class E: std::int32_t { E0, E1};
std::int32_t E0;

Масштабирование перечисления также запрещает неявное преобразование значений перечисления в другие типы.

Поиск и устранение проблем

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

Примеры

расширить все

#include<cstdint>

enum E1: std::int32_t { E10, E11}; //Noncompliant
// std::int32_t E10; causes compilation errors

enum class E2: std::int32_t { E20, E21}; //Compliant
std::int32_t E20;

В этом примере объявление unscoped enum E1 не совместим. Повторное выделение значения перечисления неограниченного перечисления приводит к ошибкам компиляции (как показано на линии с комментариями), которые переоценивают значение перечисления E10).

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

Группа: Декларация
Категория: Необходимый, Автоматизированный
Введенный в R2019b