两个time_point实例之间的差异不是持续时间?

pda*_*gog 19 c++ g++

我不明白为什么这个代码与g ++ 4.7.2扼杀:

#include <chrono>

main ()
{
    std::chrono::system_clock::time_point t1, t2 ;
    std::chrono::seconds delay ;

    t1 = std::chrono::system_clock::time_point::max () ;
    t2 = std::chrono::system_clock::now () ;
    delay = t1 - t2 ;
    // t1 = t2 + delay ;
    // t1 = t2 - delay ;
}
Run Code Online (Sandbox Code Playgroud)

有错误:

test.cc: In function ‘int main()’:
test.cc:10:18: error: no match for ‘operator=’ in ‘delay = std::chrono::operator,<std::chrono::system_clock, std::chrono::duration<long int, std::ratio<1l, 1000000l> >, std::chrono::duration<long int, std::ratio<1l, 1000000l> > >((*(const std::chrono::time_point<std::chrono::system_clock, std::chrono::duration<long int, std::ratio<1l, 1000000l> > >*)(& t1)), (*(const std::chrono::time_point<std::chrono::system_clock, std::chrono::duration<long int, std::ratio<1l, 1000000l> > >*)(& t2)))’
Run Code Online (Sandbox Code Playgroud)

在我看来,"time_point - time_point"给出了"持续时间".

Dav*_*own 24

它确实产生持续时间,但有不同类型的持续时间.std::chrono::duration在表示类型和单位比率上进行模板化.std::chrono::seconds例如,单位比率为1,而std::chono::nanoseconds单位比率为std::nano1/1000000000.时间点具有相同的模板参数.

具体单位比率std::chrono::system_clock::time_point是实施定义的,但几乎肯定小于std::chrono::seconds.因此,通过减去这两个时间点产生的持续时间具有比可以表示的精度更高的精度std::chrono::seconds.默认行为是不允许使用具有整数表示的持续时间丢失精度的赋值.因此,您可以使用具有足够精度(std::chrono::system_clock::duration)的持续时间或将结果转换为您想要的持续时间(std::chrono::duration_cast<std::chrono::seconds>(...)).


Pet*_*ker 5

time_point - time_point确实返回 a duration,只是不是代码中的那个。您可以替换std::chrono::secondsstd::chrono::system_clock::duration,或者您可以使用 aduration_cast转换为您需要的类型。