Freigeben über


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