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