获得变量极限的优雅方法
elegant way to get a variables limit
有没有比更好的方法将变量设置为其极限
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();
只有一个地方提到了这种类型。
相关文章:
- 为不同配置设置MSVC_RUNTIME_LIBRARY的正确方法是什么
- 通过方法访问结构
- 最小硬币更换问题(自上而下方法)
- C++为构建时间获取QDateTime的可靠方法
- 在C#中处理C++指针而不使用unsafe的最佳方法
- 处理多个异常集合的C++方法
- 如果C++类在类方法中具有动态分配,但没有构造函数/析构函数或任何非静态成员,那么它仍然是POD类型吗
- 有什么方法可以遍历结构吗
- 当类在C++中定义时,有什么方法可以"register"类吗?
- 在C++中,将大的无符号浮点数四舍五入为整数的最佳方法是什么
- 实现无开销push_back的最佳方法是什么
- 使用std::函数映射对象方法
- 有符号的int和int-有没有一种方法可以在C++中区分它们
- C++从另一个类访问公共静态向量的正确方法是什么
- C++优先级队列,按对象的唯一指针的特定方法升序排列
- 没有为自己的结构调用列表推回方法
- 有没有什么方法可以使用一个函数中定义的常量变量,也可以由c++中同一程序中的其他函数使用
- 在类定义之后定义一个私有方法
- 枚举环境变量的惯用C++14/C++17方法
- 获得变量极限的优雅方法