获得变量极限的优雅方法

elegant way to get a variables limit

本文关键字:方法 极限 变量      更新时间:2023-10-16

有没有比更好的方法将变量设置为其极限

varname = std::numeric_limits<decltype(varname)>::max();

尤其是在初始化时

int64_t varname = std::numeric_limits<decltype(varname)>::max();

我通常不想在这样的表达式中使用类型,因为如果类型被更改,很容易错过这一点。

为了完整性,绕过合法性的边缘:

#include <iostream>
#include <limits>
template<class T>
  T biggest(T&)
{
  return std::numeric_limits<T>::max();
}
int main()
{
  std::int64_t i = biggest(i);
  std::cout << i << std::endl;
  return 0;
}

Re

"我通常不想在这样的表达式中使用类型,因为如果类型发生变化,很容易错过这个。

这很简单:

auto varname = std::numeric_limits<int64_t>::max();

您可以通过多种方式降低std::numeric_limits的冗长程度,例如通过模板别名或定义函数模板。

template< class Type >
using Limits_ = std::numeric_limits<Type>;
auto varname = Limits_<int64_t>::max();

template< class Type >
constexpr auto max_of() -> Type { return std::numeric_limits<Type>::max(); }
auto varname = max_of<int64_t>();

在C++14及更高版本中,您可以将max_of作为模板变量,出于我从未见过的原因,有些人更喜欢这样做。

auto怎么样?

auto varname = std::numeric_limits<int64_t>::max();

只有一个地方提到了这种类型。