首页 > 解决方案 > 有没有简单的方法来检查一个值是否不能被另一种类型安全地表示?

问题描述

如题。

例如,假设我们有一个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.
  }

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

标签: c++type-conversionrange

解决方案


在 C++20 中,您可以使用std::in_range

std::in_range<std::uint32_t>(v)

另请参阅函数检查整数类型是否可以适合可能不同(整数)类型的值


推荐阅读