c ++ chrono意外行为

时间:2014-03-22 20:45:56

标签: c++ c++11

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();按预期工作,并在两个编译器上给出相同的结果。

这怎么可能?

1 个答案:

答案 0 :(得分:4)

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

  

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

因此,GCC与VS有不同的分辨率。

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

正如您已经发现的那样,有将这种时钟转换为已知分辨率的方法。