Condividi tramite


Avviso C26828

I diversi tipi di enumerazione hanno valori sovrapposti. È stata usata un'altra costante di enumerazione qui?

Osservazioni:

Nella maggior parte dei casi, un singolo tipo di enumerazione descrive tutti i flag di bit che è possibile usare per un'opzione. Se si usano due tipi di enumerazione diversi con valori sovrapposti nella stessa espressione bit per bit, è probabile che tali tipi di enumerazione non siano stati progettati insieme.

Nome dell'analisi del codice: MIXING_OVERLAPPING_ENUMS

Esempio

Il codice di esempio seguente causa l'avviso 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?
}

Per correggere l'avviso, assicurarsi che i tipi di enumerazione progettati per l'uso insieme non abbiano valori sovrapposti. In alternativa, assicurarsi che tutte le opzioni correlate siano in un singolo tipo di enumerazione.

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

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

Vedi anche

C26813
C26827