警告 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
}
另请参阅
反馈
https://aka.ms/ContentUserFeedback。
即将发布:在整个 2024 年,我们将逐步淘汰作为内容反馈机制的“GitHub 问题”,并将其取代为新的反馈系统。 有关详细信息,请参阅:提交和查看相关反馈