警告 C26450

算术溢出:“operator”运算会导致编译时溢出。 使用更宽的类型来存储操作数 (io.1)

备注

此警告表明算术运算在编译时可证明是有损的。 当操作数全部是编译时常量时,可以断言它。 目前,我们检查左移、乘法、加法和减法运算是否存在此类溢出。

警告 C4307 是 Microsoft C++ 编译器中的类似检查。

代码分析名称:RESULT_OF_ARITHMETIC_OPERATION_PROVABLY_LOSSY

示例

int multiply()
{
    const int a = INT_MAX;
    const int b = 2;
    int c = a * b; // C26450 reported here
    return c;
}

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

long long multiply()
{
    const int a = INT_MAX;
    const int b = 2;
    long long c = static_cast<long long>(a) * b; // OK
    return c;
}

另请参阅

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