Avertissement du compilateur (niveau 1) C5055
opérateur 'operator-name' : déconseillé entre les énumérations et les types à virgule flottante
Notes
C++20 a déprécié les conversions arithmétiques habituelles sur les opérandes, où un opérande est de type énumération et l’autre est de type à virgule flottante. Pour plus d’informations, consultez la proposition C++ Standard P1120R0.
Dans Visual Studio 2019 version 16.2 et ultérieure, une conversion implicite entre les types d’énumération et les types à virgule flottante génère un avertissement de niveau 1 lorsque l’option du /std:c++latest
compilateur est activée. Dans Visual Studio 2019 version 16.11 et ultérieure, il génère également un avertissement sous /std:c++20
.
Exemple
Dans Visual Studio 2019 version 16.2 et ultérieure, une opération binaire entre une énumération et un type à virgule flottante génère un avertissement de niveau 1 lorsque l’option du /std:c++latest
compilateur est activée. Dans Visual Studio 2019 version 16.11 et ultérieure, il génère également un avertissement sous /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
}
Pour éviter l’avertissement, utilisez static_cast
pour convertir le deuxième opérande :
// 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;
}