difftime和'-'之间有什么区别?

23

我有两个 time_t 类型的变量 - varEnd 和 varStart。 现在为了查看它们之间的差异, 我可以执行

varEnd - varStart; 
difftime(varEnd, varStart);

同时两者都返回秒数。

请问它们有什么区别?或者哪一个是推荐的?


2
为什么这被标记为 C++ - Paul R
1
@PaulR:difftime()在C和C++中都存在。 - Keith Thompson
1
你可能也可以称之为Pascal或FORTRAN表单,但这并不意味着这是一个Pascal或FORTRAN问题。 ;) - Paul R
如果该函数可以直接从许多其他语言中调用并与该社区开发人员相关,则可能应添加更多标签,而不是删除它们,因为这会增加搜索概率并帮助该社区。 - Naresh
2个回答

37
该语言规定,time_t是一种表示时间的算术类型。它不要求以任何特定方式表示时间。
如果time_t按秒数自某一时刻起表示时间,则“-”运算符将正确计算两个time_t值之间的差异(以秒为单位)。
如果不这样做(例如,如果精度为一毫秒,或者如果time_t的位被分成表示年份、月份、天数等的组),那么“-”运算符可能会产生无意义的结果。
另一方面,difftime()函数“知道”time_t如何表示时间,并使用该信息来计算以秒为单位的差异。
在大多数实现中,简单的减法和difftime()函数执行相同的操作,但只有difftime()保证在所有实现上都能正确工作。
另一个区别是:difftime()返回浮点类型double的结果,而time_t值上的“-”运算符返回time_t类型的结果。在大多数情况下,结果将被隐式转换为您分配给它的类型,但如果time_t恰好是无符号整数类型,则从较晚时间减去较早时间将产生一个非常大的值,而不是负值。我见过的每个系统都将time_t实现为32位或64位有符号整数类型,但允许使用无符号类型——这是简单地对time_t值进行减法运算并没有必要有意义的另一个原因。

2
difftime()返回一个浮点型的double值,如果你不先将它们转换为double类型,仅仅减去它们是不行的。
来源:这里

2
是的,但是即使在减去它们之前将两个 time_t 操作数转换为 double 也不能保证与 difftime 做相同的事情 - 这就是为什么 difftime 存在的原因。请参见我的答案。 - Keith Thompson

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接