c++ chrono的意外行为

c++ chrono unexpected behavior

本文关键字:意外 chrono c++      更新时间:2023-10-16
std::chrono::system_clock::time_point start;
//1 second passes
std::cout << (std::chrono::high_resolution_clock::now()-start).count();

上面的代码,1秒后,在Visual Studio 2012中给我10000000,但在gcc 4.8.2中给我100000000

将最后一行更改为std::chrono::duration_cast<std::chrono::microseconds>(std::chrono::high_resolution_clock::now()-start).count();如预期的那样工作,并在两个编译器上给出相同的结果。

这怎么可能?

根据http://en.cppreference.com/w/cpp/chrono/high_resolution_clock

类std::chrono::high_resolution_clock表示实现提供的滴答周期最小的时钟。

所以,GCC和vs有不同的分辨率。

标准允许这样做,因为不同的系统对时间精度有不同的要求。

正如你已经发现的,有一些方法可以将这样的时钟转换为已知的分辨率。