Sdílet prostřednictvím


Upozornění C26828

Různé typy výčtů mají překrývající se hodnoty. Chtěli jste tady použít jinou konstantu výčtu?

Poznámky

Ve většině případů jeden typ výčtu popisuje všechny příznaky bitů, které můžete použít pro možnost. Pokud použijete dva různé typy výčtu, které mají překrývající se hodnoty ve stejném bitovém výrazu, je pravděpodobné, že tyto typy výčtu nebyly navrženy pro společné použití.

Název analýzy kódu: MIXING_OVERLAPPING_ENUMS

Příklad

Následující ukázkový kód způsobí upozornění 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?
}

Pokud chcete upozornění opravit, ujistěte se, že typy výčtů navržené pro použití nemají žádné překrývající se hodnoty. Nebo se ujistěte, že všechny související možnosti jsou v jednom typu výčtu.

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

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

Viz také

C26813
C26827