C++ 获得变量限制的优雅方法
有没有更好的方法将变量设置为其极限之一C++ 获得变量限制的优雅方法,c++,coding-style,numeric-limits,C++,Coding Style,Numeric Limits,有没有更好的方法将变量设置为其极限之一 varname = std::numeric_limits<decltype(varname)>::max(); varname=std::numeric_limits::max(); 尤其是在初始化时 int64_t varname = std::numeric_limits<decltype(varname)>::max(); int64_t varname=std::numeric_limits::max(); 我通常
varname = std::numeric_limits<decltype(varname)>::max();
varname=std::numeric_limits::max();
尤其是在初始化时
int64_t varname = std::numeric_limits<decltype(varname)>::max();
int64_t varname=std::numeric_limits::max();
我通常不想在此类表达式中使用该类型,因为如果类型发生更改,则很容易忽略该类型。自动如何
auto varname = std::numeric_limits<int64_t>::max();
auto varname=std::numeric_limits::max();
只有一个地方提到了该类型。Re
“我通常不想在此类表达式中使用该类型,因为如果类型发生更改,则很容易忽略该类型
这很简单:
auto varname = std::numeric_limits<int64_t>::max();
或
模板
constexpr auto max_of()->类型{return std::numeric_limits::max()}
auto varname=max_of();
在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;
}
#包括
#包括
模板
T最大(T&)
{
返回std::numeric_limits::max();
}
int main()
{
std::int64_t i=最大(i);
我可以安装一个变量模板:template constexpr T max\u val=std::numeric\u limits::max()
然后使用auto v=max_val;
。在C++17中,我会将模板内联
,并将其粘贴在标题中。我实际上认为这是最简洁的方式。您认为这里什么不合法?@MarcinZukowski它是合法的,但只需要一个维护人员以某种方式使用参数的值,它就会变成UB。
template< class Type >
constexpr auto max_of() -> Type { return std::numeric_limits<Type>::max(); }
auto varname = max_of<int64_t>();
#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;
}