Ostrzeżenie kompilatora (poziom 1) C5055
operator "operator-name": przestarzałe między wyliczeniami i typami zmiennoprzecinkowych
Uwagi
Język C++20 wycofał zwykłe konwersje arytmetyczne na operandach, gdzie jeden operand ma typ wyliczenia, a drugi jest typu zmiennoprzecinkowego. Aby uzyskać więcej informacji, zobacz P1120R0 propozycji standardowej języka C++.
W programie Visual Studio 2019 w wersji 16.2 lub nowszej niejawna konwersja między typami wyliczenia i typami zmiennoprzecinkowych powoduje wygenerowanie ostrzeżenia poziomu 1 po włączeniu /std:c++latest
opcji kompilatora. W programie Visual Studio 2019 w wersji 16.11 lub nowszej zostanie również wyświetlone ostrzeżenie w obszarze /std:c++20
.
Przykład
W programie Visual Studio 2019 w wersji 16.2 lub nowszej operacja binarna między wyliczeniem a typem zmiennoprzecinkowa powoduje wygenerowanie ostrzeżenia poziomu 1 po włączeniu /std:c++latest
opcji kompilatora. W programie Visual Studio 2019 w wersji 16.11 lub nowszej zostanie również wyświetlone ostrzeżenie w obszarze /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
}
Aby uniknąć ostrzeżenia, użyj polecenia static_cast
, aby przekonwertować drugi operand:
// 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;
}