2038年带有time()的32位翻转

时间:2014-12-08 18:33:42

标签: c++ time

很多C ++程序都是用time()函数编写的,但是你可能知道,这在2038年之后不会起作用,因为它会返回一个负整数。它会导致很多程序完全无法使用,所以我只是想知道,解决方案是什么,有人担心这个吗?现在有没有替代品呢?

另外,你认为这会成为一个主要问题还是不值得担心?

2 个答案:

答案 0 :(得分:2)

一个问题是可以回答的:

  

现在有没有其他选择?

是的,自从C ++ 11以来,std::chrono库提供了大约500年来被指定的时间类型。由于它们被很好地封装,所以扩展它们的范围应该不会太难,如果有什么可识别的,那么C ++仍然在使用。

在大多数现代平台上,time_t有64位,因此即使使用该问题,如果您始终将结果分配给time_t变量,而不是int,也可以避免此问题或者其他什么。

其他问题纯粹是推测性的。我怀疑问题与Y2K类似 - 大多数程序已经做了正确的事情;其他人很容易改变;开发人员退休后很久就会出现一些古老的系统,编译器停止运行,源代码丢失了。

答案 1 :(得分:1)

time函数返回time_t值,并且未指定time_t类型必须有多大。实现可能只是更改time_t typedef,使其大小至少为64位。我认为在大多数(或所有)64位计算机上已经是这种情况了。这可能会导致依赖于time_t小于64位的程序出现问题,但我认为time_t之类的情况不太常见。