有没有简单的方法来检查一个值是否不能安全地由另一种类型呈现?

YHS*_*SPY 4 c++ range type-conversion

如题。

例如,假设我们有一个int8_t值“-10”,我想在我的程序中动态检查(运行时值)是否-10可以在uint32_t变量之后安全地保存这个确切的整数值std::trunc。在这种情况下,由于这是一个负值,所以它不能被无符号类型保存。我怎样才能在 C++ 代码中做到这一点?因为如果我使用正常的比较方式,隐式转换会破坏如下所示的类型信息。有没有其他简单的方法可以做到这一点?

  int8_t v = -10; 
  if (v <= std::numeric_limits<uint32_t>::max() &&
      v >= std::numeric_limits<uint32_t>::min()) {
    // It will be true here.
  }
Run Code Online (Sandbox Code Playgroud)

我想找到一种健全的方法来检查目标类型的可用值范围是否可以完全覆盖源类型的所有可用值。意思是显式转换后,结果值应该与原始值完全相同。