Udostępnij przez


Ostrzeżenie C26828

Różne typy wyliczenia mają nakładające się wartości. Czy w tym miejscu chcesz użyć innej stałej wyliczenia?

Uwagi

W większości przypadków pojedynczy typ wyliczenia opisuje wszystkie flagi bitów, których można użyć dla opcji. Jeśli używasz dwóch różnych typów wyliczenia, które mają nakładające się wartości w tym samym wyrażeniu bitowym, prawdopodobieństwo, że te typy wyliczenia nie zostały zaprojektowane do użytku razem.

Nazwa analizy kodu: MIXING_OVERLAPPING_ENUMS

Przykład

Poniższy przykładowy kod powoduje ostrzeżenie 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?
}

Aby naprawić ostrzeżenie, upewnij się, że typy wyliczenia przeznaczone do użytku razem nie mają nakładających się wartości. Możesz też upewnić się, że wszystkie powiązane opcje znajdują się w jednym typie wyliczenia.

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

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

Zobacz też

C26813
C26827