簡體   English   中英

std::chrono::system_clock + now() 到毫秒並返回不同的行為

[英]std::chrono::system_clock + now() to milliseconds and back different behavior

我對找到一種將毫秒轉換為std::chrono::system_time::time_point的便攜方法感到有些困惑。 我看起來像代碼:

https://godbolt.org/z/e7Pr3oxMT

#include <chrono>
#include <iostream>

int main ()
{
    auto now = std::chrono::system_clock::now();
    auto now_ms = std::chrono::time_point_cast<std::chrono::milliseconds>(now);

    auto value = now_ms.time_since_epoch();
    long duration = value.count();

    std::cout << duration << std::endl;

    std::chrono::milliseconds dur(duration);

    std::chrono::time_point<std::chrono::system_clock> dt(dur);

    if (dt != now_ms)
        std::cout << "Failure." << std::endl;
    else
        std::cout << "Success." << std::endl;
    

    return 0;
}

應該在 win32 和 linux 上工作相同。 但不幸的是,在 windows (msvc) 上,我遇到了 output Failure 請幫助理解什么是錯的?

問題大概是

long duration = value.count();

long類型不一定是 64 位。 除了char之外,標准沒有定義 integer 類型的確切大小。 例如,即使在 x64 構建中,Visual Studio 也長期使用 32 位。

不管怎樣,試試

uint64_t duration = value.count();

在您的代碼中或只是

auto duration = value.count();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM