std::numeric_limits<T>::infinity()
如果T
则返回0是一个整型。我可以使用此功能的替代品吗?我有一系列 int 变量(它们可能是 int8, uint8, int32, uint32, int64, uint64
),它们可以采用最小值(包含)和最大值(包含)之间的任何值。
我需要一个小于所有这些变量的值,并且该值将用于比较目的(我将比较该值是否小于我的一系列 int 变量)。
我知道我可以像 -std::numeric_limits<double>::infinity()
,但如果我要将 int 变量与该值进行比较,比较将以 FP 精度进行,并且我担心其对性能的影响。理想情况下,我希望所有的比较都用整数完成。
我认为我们可以拥有的最小 int 值是 std::numeric_limits<int64_t>::minimum()
,所以我认为我的问题本质上是问我们是否可以获得比这个更小的整数值?
最佳答案
您可以定义自己的负无穷常数,该常数小于任何其他值。
使用 C++20's three way comparator (aka spaceship) 就不那么乏味了,但在以前的版本中可行:
#include <compare>
struct minus_infinity_t {} constexpr minus_infinity;
auto constexpr operator<=> (minus_infinity_t, minus_infinity_t)
{ return std::weak_ordering::equivalent; }
template<class T> auto constexpr operator<=> (T, minus_infinity_t)
{ return std::weak_ordering::greater; }
template<class T> auto constexpr operator<=> (minus_infinity_t, T)
{ return std::weak_ordering::less; }
int main()
{
constexpr int n = 0;
constexpr long long k = 1;
constexpr double l = 2;
static_assert(n > minus_infinity);
static_assert(k > minus_infinity);
static_assert(l > minus_infinity);
static_assert(minus_infinity <= n);
static_assert(minus_infinity <= k);
static_assert(minus_infinity <= l);
}
改进思路:
- 限制概念中的
T
- 定义正无穷
- 定义负零和正零
关于c++ - 小于最小可表示 int 的最小 int 值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71699137/