使用Visual Studio获取time_t的最大值
Get maximum value for time_t with Visual Studio
我需要获得独立于平台的以下代码:
timeval tv;
tv.tv_sec = std::numeric_limits<time_t>::max();
这段代码在各种Linux操作系统和Mac OS X下都能很好地工作。
不幸的是,在windows下,对于tv.tv_sec.,这将返回-1
我当时想把时间重新定义为:
typedef int time_t;
这也没有起到作用,因为喜剧演员现在抱怨道:
error C2371: 'time_t' : redefinition; different basic types
我如何才能让代码独立于平台形式运行?
tv.tv_sec = std::numeric_limits<decltype(tv.tv_sec)>::max();
无下降型的替代方案
template<typename T>
void set_max(T& val){val = std::numeric_limits<T>::max();}
set_max(tv.tv_sec);
您不能通过便携方式完成此操作。time_t甚至不一定是一个积分类型。它可以是一个结构或任何真正的东西
既然看起来像是在设置结构timeval的tv_sec成员,为什么不在那里使用正确的类型呢?这被定义为一个长int,所以你应该这样做:
tv.tv_sec = std::numeric_limits<long int>::max();
尽管如此,我现在注意到POSIX说tv_sec是一个time_t,尽管MSDN和GNU libc使用长int。这些甚至无法区分持续时间和时间点的旧时间API肯定应该被替换。如果您可以使用C++11,请查看std::chrono。
无论如何,即使在Windows上,std::numeric_limits<std::time_t>::max()
实际上也会给出最大时间值。问题只是Window对timeval::tv_sec的定义不是POSIX所要求的time_t,因此转换为long int会得到负数。
但是,可以在Windows上通过定义_USE_32BIT_TIME_T来修复此问题。这将导致time_t的定义与tv_sec的timeval中使用的类型匹配,然后std::numeric_limits<time_t>::max()
就会工作。
相关文章:
- 比较并显示使用最小值(a,b)和最大值(a、b)升序排列的4个数字
- 使用指针从C++中的数组中获取最大值
- 如何将这个C++哈希表转换为动态扩展和收缩,而不是使用硬设置的最大值
- 如何创建一个函数来计算并返回平均值、最大值和最小值
- 在二维数组中查找最小值和最大值?
- 整数溢出,最大值为 pow(10,19)
- 以C++递归方式查找向量中的最大值
- C++ - 如何在结构向量中找到结构体一个成员的最大值?
- 查找数组中第一个最小值和最后一个最大值元素之间的算术平均值
- C++ 函数,用于查找传入的 N 个数字的平均值、总和、最小值和最大值
- 我的 If Else 语句无法在向量 (C++) 中提供最大值
- 如何使用可变参数模板类使用模板元编程获得最大值
- C++不同的最小最大值实现
- Vec3b:r/g/b 颜色的最大值为 254,而不是 255
- CUDA - 将 float3 数组的 (x,y,z) 分量的最小值/最大值分开?
- 是否可以将无符号 int 的最大值转换为 int 并将结果转换为 -1?
- 查找包含 N 个元素的数组的最小值和最大值
- 井字游戏具有奇怪行为的最小最大值算法(C++)
- 错误C++在Visual Studio 2019中使用numeric_limits的长双精度最小值/最大值
- 是否存在用于 C 或 C++ 中常见数学运算(例如最小值、最大值和平均值)的可导入库?