编译器警告(等级 1)C5055

运算符“operator-name”:已在枚举和浮点类型之间弃用

备注

C++20 已弃用操作数的常规算术转换,其中一个操作数是枚举类型,另一个是浮点类型。 有关详细信息,请参阅 C++ 标准建议 P1120R0

在 Visual Studio 2019 版本 16.2 和更高版本中,不同枚举类型和浮点类型之间的隐式转换会在启用 /std:c++latest 编辑器选项时,生成 1 级警告。 在 Visual Studio 2019 版本 16.11 及更高版本中,它还会生成警告 /std:c++20

示例

在 Visual Studio 2019 版本 16.2 和更高版本中,如果 /std:c++latest 编译器选项已启用,在枚举类型和浮点类型之间进行二元运算会生成 1 级警告。 在 Visual Studio 2019 版本 16.11 及更高版本中,它还会生成警告 /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
}

要避免出现此警告,请使用 static_cast 转换第二个操作数:

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