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.
}