使用system_clock :: to_time_t的持久time_t警告

时间:2018-02-15 16:00:51

标签: c++ time warnings

我在下面写的函数是尝试允许32位和64位时间并且努力更灵活。我收到了关于数据转换丢失的持续警告,但这并不是很有意义。

time_t now()
    {
        using namespace std::chrono;

        system_clock::time_point time_point = system_clock::now();            
        time_t now_time = system_clock::to_time_t(time_point);     
        return now_time;   //warning appears here
    }

警告:警告C4244:' =':转换自' __ time64_t'到了&time;'可能会丢失数据 在to_time_t上找到。我感到困惑的是,cppreference指示to_time_t返回time_t,但是当我导航到实际函数时,它表示它被强制为64位时间。

那么,任何想法可能导致这个?此外,我可以更清晰地实现获取系统时间并返回time_t。

我还想补充一下,该示例与此处的内容匹配: cppreference

2 个答案:

答案 0 :(得分:0)

这很可能是你遇到了MSVC 2015的文档错误。坏消息是它已经在现已退役的Microsoft Connect中记录。

它在网址https://connect.microsoft.com/VisualStudio/feedback/details/1355735/breaking-change-in-vs-2015-chrono-steady-clock-time-point-not-longer-convertible-to-system-clock-time-point(已死);报告05/22 / 15--06:42。

答案 1 :(得分:0)

事实证明,有一个预处理器定义设置_USE_32BIT_TIME_T。我在搜索时没有看到它,但这似乎是迫使time_t使用32位的原因。至于为什么to_time_t函数返回64位,我想我发现它在64位窗口上运行时被强制为64位。

如果有人能追踪到这一点,那么在这里为后代做好话会很好。我几乎100%肯定我已经看到了,但我现在找不到它。