C++ 使用比较运算符比较时间\u t值

C++ 使用比较运算符比较时间\u t值,c++,windows,time,time-t,C++,Windows,Time,Time T,我有2个time\u t值,我想找出哪个值更大 time\u t在我的平台上是内部的\u int64。我可以使用和=运算符来比较值吗? 我不想知道这两个时间值之间的差异 代码将只在Windows上运行,所以我不关心可移植性 以这种方式比较值是否正确?是的,您可以在给定的有限情况下使用普通比较运算符。可能还有其他系统无法做到这一点,但现代Linux和Windows操作系统可以很好地比较时间值 > P>根据C++标准(C++标准所指的情况)中的强< 7.27.1(3)< /强> TimeTyt 是

我有2个
time\u t
值,我想找出哪个值更大

time\u t
在我的平台上是内部的
\u int64
。我可以使用
=
运算符来比较值吗? 我不想知道这两个时间值之间的差异

代码将只在Windows上运行,所以我不关心可移植性


以这种方式比较值是否正确?

是的,您可以在给定的有限情况下使用普通比较运算符。可能还有其他系统无法做到这一点,但现代Linux和Windows操作系统可以很好地比较时间值

> P>根据C++标准(C++标准所指的情况)中的强< 7.27.1(3)< /强> <代码> TimeTyt 是<强>实数类型< /强>,其定义为<强> 2.2.5(17)< /强>为整数或浮点类型。

只要您不显式地假设整数(即通过执行
time\t;int x=t;
)可能会失去精度,您就安全了

编辑: 事实上,我收回这句话。如果转到,您可以阅读以下内容:

仅仅因为时间是算术运算,并不意味着它存储时间 作为前进时间的单调递增值。事实上,我们的标准 C库不保证t2大于t1时t1小于t2。我们折叠一张桌子 代表值的有限范围适用于不同系统的不同方式

p.J.普劳格
丁库陶瓷有限公司

由于Dinkumware在Windows系统中被广泛使用(虽然我不知道这是否适用于C++标准库),我认为这是相关的。


tl;dr:按照其他答案中的建议使用
std::difftime

假设
time\u t
对您的用例有足够高的分辨率,那么您可以。如果你需要更高的分辨率,Windows是你唯一关心的问题,那么考虑切换到Win32函数,处理在 FieldTime/Cuff>类型。

< P> C标准(C++继承了“代码>时间> < /C> >的定义”,只说Time> t/<代码>是一个能够表示时间的算术类型。它没有说明它是如何做到这一点的。原则上,一个实现可以将
time\u t
值定义为到某个未来日期的秒数,也可以按照该顺序对月、日、年、小时、分钟和秒进行编码。比较
time\t
值保证行为一致(例如
t0
意味着
t0
),但比较结果不一定说明所表示的时间顺序

为了100%可移植,您可以检查
difftime()
的结果


但是,如果您愿意满足于99%的可移植性,那么您应该安全地假设比较工作如预期的那样(即
t0
意味着
t0
实时先于
t1
)。我从未听说过这样的实现不起作用。如果时间下降,你可以向实现者抱怨,但你不能说他们没有达到标准。

如果时间突然变成一个结构或数组,可能会有相当多的代码被破坏……是的,查了一下。根据标准,它必须是一个真正的数字类型,所以你是对的。
t0
是安全的,但标准并不保证它是有意义的。请看我的答案。如果您不关心可移植性,并且知道时间是内部的,那么问题的重点是什么
\uu int64
值当然可以与比较运算符进行比较。在问这个问题之前,您是否搜索了时间?是的。这是第一个结果。它告诉了我我需要知道的一切。请在提问之前进行研究。@拟人化我已经看到了那个页面,但我故意想问这个,因为那个页面没有下面的技术人员解释的那么多。。根据filmor编辑的答案引用的标准(讽刺的是,你的评论提示),兼容
时间\u t
值应始终有效。这使得这个答案中的“可能有其他系统无法工作”的说法不正确。@user4815162342:取决于你所说的“工作”是什么意思;看到我的答案了吗?@KeithThompson发现得很好,+1。奇怪且令人惊讶的是,该标准允许一个实现使用
time\u t
作为自纪元以来的时间单位计数之外的其他东西,但C99的7.23.2.4#2和C89的4.2.12.4中的措辞是明确的:值的编码未指定。