exponenta event banner

Правило AUTOSAR C++ 14 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;

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

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

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