获得变量限制的优雅方式
elegant way to get a variables limit
是否有比
更好的方法来将变量设置为其限制之一
varname = std::numeric_limits<decltype(varname)>::max();
尤其是初始化的时候
int64_t varname = std::numeric_limits<decltype(varname)>::max();
我通常不想在此类表达式中使用类型,因为如果类型更改,很容易错过它。
汽车呢?
auto varname = std::numeric_limits<int64_t>::max();
只有一处提到了类型。
回复
” I normally do not want to use the type in such expressions since its easy to miss this if type is changed.
这很简单:
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
成为模板变量,出于某种我从未见过解释的原因,有些人更喜欢。
为了完整起见,在合法性的边缘徘徊:
#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;
}
是否有比
更好的方法来将变量设置为其限制之一varname = std::numeric_limits<decltype(varname)>::max();
尤其是初始化的时候
int64_t varname = std::numeric_limits<decltype(varname)>::max();
我通常不想在此类表达式中使用类型,因为如果类型更改,很容易错过它。
汽车呢?
auto varname = std::numeric_limits<int64_t>::max();
只有一处提到了类型。
回复
” I normally do not want to use the type in such expressions since its easy to miss this if type is changed.
这很简单:
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
成为模板变量,出于某种我从未见过解释的原因,有些人更喜欢。
为了完整起见,在合法性的边缘徘徊:
#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;
}