Выражения с типом enum или enum class не должны использоваться в качестве операндов для встроенных и перегруженных операторов, отличных от оператора подстрочного индекса [], оператора назначения =, операторов равенства = и! =, унарного & оператора и реляционных операторов <, < =, >, > =
Выражения с типом enum или enum class не должны использоваться в качестве операндов для встроенных и перегруженных операторов, отличных от оператора подстрочного индекса [], оператора назначения =, операторов равенства = и! =, унарного & оператора и реляционных операторов <, < =, >, > =.
В C++ перечисления, такие как enum или enum class имеют реализации, определенные поведением. Например, их базовым типом может быть любой интегральный тип, включая short или char. Если перечисления используются в качестве операндов для арифметических операторов, таких как + или -, они преобразуются в их базовый тип. Поскольку базовый тип перечисления зависит от реализации, результат арифметических операций, использующих перечисления в качестве операндов, непредсказуем. Чтобы избежать непредсказуемого и непортящегося кода, используйте перечисления в качестве операндов только для следующих операторов:
Оператор подстрочного индекса []
Оператор назначения =
Операторы равенства == и !=
Одноместное & оператор
Реляционные операторы <, <=,>,>=
Перечисления можно использовать в качестве операндов для встроенных или перегруженных экземпляров только указанных выше операторов. Обратите внимание, что перечисления типов битовой маски являются исключением из этого правила. То есть перечисления типов битовой маски можно использовать в качестве операндов для любых операторов.
Перечисления являются допустимыми операндами только для перечисленных выше операторов. При использовании перечислений в качестве операндов для любых других операторов Polyspace ® помечает их. Обратите внимание, что Polyspace не делает исключений для перечислений BitmaskType.
Если вы ожидаете нарушения правила, но не видите его, обратитесь к разделу Нарушения стандартов кодирования не отображаются.
| Группа: Стандартные преобразования |
| Категория: Обязательно, Автоматизировано |