Bagikan melalui


Peringatan kompiler (level 1) C5055

operator 'operator-name': tidak digunakan lagi antara enumerasi dan jenis floating-point

Keterangan

C++20 telah menghentikan konversi aritmatika biasa pada operand, di mana satu operand berjenis enumerasi dan yang lainnya berjenis floating-point. Untuk informasi selengkapnya, lihat P1120R0 proposal Standar C++.

Di Visual Studio 2019 versi 16.2 dan yang lebih baru, konversi implisit antara jenis enumerasi dan jenis floating-point menghasilkan peringatan tingkat 1 saat /std:c++latest opsi kompilator diaktifkan. Di Visual Studio 2019 versi 16.11 dan yang lebih baru, visual Studio 2019 juga menghasilkan peringatan di bawah /std:c++20.

Contoh

Di Visual Studio 2019 versi 16.2 dan yang lebih baru, operasi biner antara enumerasi dan jenis floating-point menghasilkan peringatan tingkat 1 saat /std:c++latest opsi kompilator diaktifkan. Di Visual Studio 2019 versi 16.11 dan yang lebih baru, visual Studio juga menghasilkan peringatan di bawah /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
}

Untuk menghindari peringatan, gunakan static_cast untuk mengonversi operand kedua:

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