Compilerwarnung (Stufe 1) C5055
Operator 'Operatorname': veraltet zwischen Enumerationen und Gleitkommatypen
Hinweise
C++20 hat die üblichen arithmetischen Konvertierungen für Operanden veraltet, wobei ein Operand vom Enumerationstyp und der andere vom Gleitkommatyp ist. Weitere Informationen finden Sie unter C++-Standardvorschlag P1120R0.
In Visual Studio 2019, Version 16.2 und höher, erzeugt eine implizite Konvertierung zwischen Enumerationstypen und Gleitkommatypen eine Warnung der Ebene 1, wenn die /std:c++latest
Compileroption aktiviert ist. In Visual Studio 2019, Version 16.11 und höher, erzeugt sie auch eine Warnung unter /std:c++20
.
Beispiel
In Visual Studio 2019, Version 16.2 und höher, erzeugt ein binärer Vorgang zwischen einer Enumeration und einem Gleitkommatyp eine Warnung der Ebene 1, wenn die /std:c++latest
Compileroption aktiviert ist. In Visual Studio 2019, Version 16.11 und höher, wird auch eine Warnung unter /std:c++20
:
// C5055.cpp
// Compile using: cl /EHsc /W4 /std:c++latest C5055.cpp
enum E1 { a };
int main() {
double i = a * 1.1; // Warning C5055: operator '*': deprecated between enumerations and floating-point types
}
Konvertieren Sie den zweiten Operanden mit static_cast
, um zu vermeiden, dass die Warnung ausgelöst wird:
// C5055_fixed.cpp
// Compile using: cl /EHsc /W4 /std:c++latest C5055_fixed.cpp
enum E1 { a };
int main() {
double i = static_cast<int>(a) * 1.1;
}