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