Compartilhar via


Aviso C26828

Diferentes tipos de enum têm valores sobrepostos. Você queria usar outra constante de enumeração aqui?

Comentários

Na maioria das vezes, um único tipo de enumeração descreve todos os sinalizadores de bit que você pode usar em uma opção. Se você usar dois tipos de enumeração diferentes que têm valores sobrepostos na mesma expressão bit a bit, há boas chances de que esses tipos de enumeração não tenham sido projetados para uso juntos.

Nome da análise de código: MIXING_OVERLAPPING_ENUMS

Exemplo

O código de exemplo a seguir causa o aviso C26828:

enum BitWiseA
{
    A = 1,
    B = 2,
    C = 4
};

enum class BitWiseB
{
    AA = 1,
    BB = 2,
    CC = 4,
    All = 7
};

int overlappingBitwiseEnums(BitWiseA a) 
{
    return (int)a|(int)BitWiseB::AA; // Warning C26828: Different enum types have overlapping values. Did you want to use another enum constant here?
}

Para corrigir o aviso, os tipos de enumeração projetados para serem usados juntos não podem ter valores sobrepostos. Ou todas as opções relacionadas devem estar em um único tipo de enumeração.

enum BitWiseA
{
    A = 1,
    B = 2,
    C = 4
};

int overlappingBitwiseEnums(BitWiseA a) 
{
    return (int)a|(int)BitWiseA::A; // No warning.
}

Confira também

C26813
C26827