Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
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;
}