Udostępnij za pośrednictwem


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