C++ 运算符=在两个std::chrono::time\u点之间导致错误

C++ 运算符=在两个std::chrono::time\u点之间导致错误,c++,chrono,C++,Chrono,我有一个结构,其中包含一个std::chrono::system\u clock::time\u point struct NetInfo { std::chrono::system_clock::time_point time; std::chrono::steady_clock::time_point start; }; 当我尝试将一个时间点分配给std::chrono::system\u clock::now()的结果时 我得到了这个巨大的错误 /home/roo

我有一个结构,其中包含一个
std::chrono::system\u clock::time\u point

struct NetInfo {
    std::chrono::system_clock::time_point time;
    std::chrono::steady_clock::time_point start;
};
当我尝试将一个时间点分配给
std::chrono::system\u 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> > >&&’
/home/rootkid/rendu/cpp2/cpp\u zia/lib/NetService/src/NetService.cpp:48:51:错误:与“operator=”不匹配(操作数类型为“std::chrono::_V2::stable_clock::time_point{aka std::chrono::time_point}和“std::chrono:::_V2::system_clock::time_point{aka std::chrono::time_point}”)
ni.start=std::chrono::system_clock::now();
^
在/usr/include/c++/7.2.1/thread:38:0中包含的文件中,
来自/home/rootkid/rendu/cpp2/cpp_zia/lib/NetService//include/NetService.h:3,
来自/home/rootkid/rendu/cpp2/cpp_zia/lib/NetService/src/NetService.cpp:1:
/usr/include/c++/7.2.1/chrono:610:14:注:候选:constexpr std::chrono::time_point&std::chrono::time_point::operator=(const std::chrono::time_point&)
结构时间点
^~~~~~~~~~
/usr/include/c++/7.2.1/chrono:610:14:注意:参数1从“std::chrono::V2::system_clock::time_point{aka std::chrono::time_point}”到“const std::chrono::time_point}”没有已知的转换
/usr/include/c++/7.2.1/chrono:610:14:注:候选:constepr std::chrono::time_point&std::chrono::time_point::operator=(std::chrono::time_point&)
/usr/include/c++/7.2.1/chrono:610:14:注意:参数1从“std::chrono::V2::system_clock::time_point{aka std::chrono::time_point}”到“std::chrono::time_point&”没有已知的转换

你知道我做错了什么吗?

虽然没有具体说明,但这是一个事实上的标准,
系统时钟正在测量(大约自1970-01-01 00:00:00 UTC以来的持续时间),尽管每个平台的精度不同

稳定时钟
的时代也未明确,也没有形成事实上的标准。不同的平台做不同的事情。例如,在我的平台上,
稳定时钟
测量计算机启动后的时间

旨在在编译时捕获尽可能多的逻辑错误。将
系统时钟::时间点
分配给
稳定时钟::时间点
将是一个逻辑错误,因为这两个时钟是针对不同的时代测量的

未来的标准可能会提供一种将一个时钟的
时间点
转换或“转换”到另一个时钟的方法,但这并不是一个简单的任务。这需要考虑到不同时代的差异,进行一些计算。否则,
时间点
将表示分配后与分配前不同的时间瞬间


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

开始
是一个
稳定的时钟
时间点,如果您试图从
系统时钟
时间点分配,则无法执行该操作。两种时间点类型都不同。
    /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> > >&&’