【发布时间】:2019-05-15 07:32:33
【问题描述】:
当我们投射到uint32_t 时,我们如何正确地检查和处理溢出,例如:
long int val = <some value>
uint32_t new_val = static_cast<uint32_t>(val);
如果我尝试上述方法,我会收到预期的转换错误:
错误:从“long int”转换为“uint32_t {aka unsigned int}”可能会改变其值 [-Werror=conversion]
正如here 所见,我需要将val 与INT_MAX 和INT_MIN 进行比较,但为了让我理解和了解这一点,我希望简要说明什么是检查溢出的最佳方法在上述情况下。
【问题讨论】:
-
bool overflow = val > std::numeric_limits<uint32_t>::max() || val < std::numeric_limits<uint32_t>::min(); -
@George 非常感谢您对您的评论进行非常简短的解释(可能以答案的形式) - 特别是如果您能解释这是如何以及如果这是对 unsigned int 的强制转换这一事实使任何区别。
-
@skratchi.at 请在我的问题中更新
标签: c++ c++14 overflow static-cast