AUTOSAR C++14 Rule A7-2-3

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

Описание

Управляйте определением

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

Объяснение

Перечислимые величины в неограниченном по объему перечислении могут конфликтовать с другими идентификаторами в том же осциллографе как перечисление и вызвать ошибки компиляции. Например:

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;

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

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

Группа: объявление

Введенный в R2019b