Share via


警告 C26451

算术溢出:对 size-a 字节值使用运算符“operator”,然后将结果强制转换为 size-b 字节值。 在调用运算符“operator”之前将值强制转换为更宽的类型,以避免溢出 (io.2)

此警告指示由于整型提升规则和类型多于通常用于执行算术的规则和类型而导致的错误行为。

备注

代码分析检测整数值何时向左移动、乘以、添加或减去,结果将转换为更宽的整型类型。 如果操作溢出较窄的整型类型,则数据将丢失。 可以通过在算术运算之前将值强制转换为更宽的类型来防止这种损失。

代码分析名称:RESULT_OF_ARITHMETIC_OPERATION_CAST_TO_LARGER_SIZE

示例

以下代码将生成此警告:

void leftshift(int i) noexcept
{
  unsigned long long x;
  x = i << 31;  // C26451 reported here

  // code
}

若要更正此警告,请使用以下代码:

void leftshift(int i) noexcept
{
  unsigned long long x;
  x = static_cast<unsigned long long>(i) << 31; // OK

  // code
}

另请参阅

26450
26452
26453
26454
ES.103:不要溢出