gpt4 book ai didi

c++ - operator= 在两个 std::chrono::time_point 之间导致错误

转载 作者:太空狗 更新时间:2023-10-29 20:51:44 25 4
gpt4 key购买 nike

我有一个包含 std::chrono::system_clock::time_point

的结构
struct NetInfo {
std::chrono::system_clock::time_point time;
std::chrono::steady_clock::time_point start;
};

当我尝试将 time_point 之一分配给 std::chrono::system_clock::now()

的结果时
    api::NetInfo ni;
ni.start = std::chrono::system_clock::now();

我得到了这个巨大的错误

    /home/rootkid/rendu/cpp2/cpp_zia/lib/NetService/src/NetService.cpp:48:51: error: no match for ‘operator=’ (operand types are ‘std::chrono::_V2::steady_clock::time_point {aka std::chrono::time_point<std::chrono::_V2::steady_clock, std::chrono::duration<long int, std::ratio<1, 1000000000> > >}’ and ‘std::chrono::_V2::system_clock::time_point {aka std::chrono::time_point<std::chrono::_V2::system_clock, std::chrono::duration<long int, std::ratio<1, 1000000000> > >}’)
ni.start = std::chrono::system_clock::now();
^
In file included from /usr/include/c++/7.2.1/thread:38:0,
from /home/rootkid/rendu/cpp2/cpp_zia/lib/NetService/./include/NetService.h:3,
from /home/rootkid/rendu/cpp2/cpp_zia/lib/NetService/src/NetService.cpp:1:
/usr/include/c++/7.2.1/chrono:610:14: note: candidate: constexpr std::chrono::time_point<std::chrono::_V2::steady_clock, std::chrono::duration<long int, std::ratio<1, 1000000000> > >& std::chrono::time_point<std::chrono::_V2::steady_clock, std::chrono::duration<long int, std::ratio<1, 1000000000> > >::operator=(const std::chrono::time_point<std::chrono::_V2::steady_clock, std::chrono::duration<long int, std::ratio<1, 1000000000> > >&)
struct time_point
^~~~~~~~~~
/usr/include/c++/7.2.1/chrono:610:14: note: no known conversion for argument 1 from ‘std::chrono::_V2::system_clock::time_point {aka std::chrono::time_point<std::chrono::_V2::system_clock, std::chrono::duration<long int, std::ratio<1, 1000000000> > >}’ to ‘const std::chrono::time_point<std::chrono::_V2::steady_clock, std::chrono::duration<long int, std::ratio<1, 1000000000> > >&’
/usr/include/c++/7.2.1/chrono:610:14: note: candidate: constexpr std::chrono::time_point<std::chrono::_V2::steady_clock, std::chrono::duration<long int, std::ratio<1, 1000000000> > >& std::chrono::time_point<std::chrono::_V2::steady_clock, std::chrono::duration<long int, std::ratio<1, 1000000000> > >::operator=(std::chrono::time_point<std::chrono::_V2::steady_clock, std::chrono::duration<long int, std::ratio<1, 1000000000> > >&&)
/usr/include/c++/7.2.1/chrono:610:14: note: no known conversion for argument 1 from ‘std::chrono::_V2::system_clock::time_point {aka std::chrono::time_point<std::chrono::_V2::system_clock, std::chrono::duration<long int, std::ratio<1, 1000000000> > >}’ to ‘std::chrono::time_point<std::chrono::_V2::steady_clock, std::chrono::duration<long int, std::ratio<1, 1000000000> > >&&’

知道我在这里做错了什么吗?

最佳答案

虽然未指定,但system_clock 是事实上的标准正在测量Unix Time (大约自 1970-01-01 00:00:00 UTC 以来的持续时间),但每个平台的精度不同。

steady_clock 的纪元也未指定,并且没有形成事实上的标准。不同的平台做不同的事情。例如在我的平台上 steady_clock测量自计算机启动以来的时间。

<chrono>旨在在编译时捕获尽可能多的逻辑错误。分配 system_clock::time_point 将是一个逻辑错误到 steady_clock::time_point因为这两个时钟针对不同的时代进行测量。

future 的标准可能提供一种方法来“转换”或“转换”一个时钟的 time_point到另一个,但这不会是一个简单的任务。它必须涉及一些考虑到时代差异的计算。否则 time_point与分配之前相比,将代表分配之后的不同时刻。

tl;dr:编译器在编译时为您捕获了一个逻辑错误。

关于c++ - operator= 在两个 std::chrono::time_point 之间导致错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48628065/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com