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