c++ chrono的意外行为
c++ chrono unexpected behavior
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有不同的分辨率。
标准允许这样做,因为不同的系统对时间精度有不同的要求。
正如你已经发现的,有一些方法可以将这样的时钟转换为已知的分辨率。
相关文章:
- 从持续时间构造std::chrono::system_clock::time_point
- 如何在c++迭代器类型中包装std::chrono
- 在C++中对T*类型执行std::move的意外行为
- 使用取消引用的指针的多态性会产生意外的结果.为什么?
- 处理除以零会导致<csignal>意外行为
- 在两台机器之间进行时间戳的最佳c++chrono函数是什么
- vscode下的Arduino代码出现意外编译错误
- 使用++运算符会导致意外的结果
- 套接字读取后,我在缓冲区中看到意外输入
- 更改.cpp程序的输入文件中数据的位置会意外更改输出
- 使用vscode调试时,GDB意外退出
- 此测试()中发生了什么意外过程?为什么总是覆盖 ch[0 1 2..]?
- 尝试将字符串/字符转换为整数会产生意外结果
- 错误 C2760:语法错误:映射迭代器上意外的标记"标识符",预期的";"
- C++标头错误 C2238 意外标记";"
- C++中意外的多头值
- vector.size() 在比较中意外工作
- 使用 malloc() 时出现意外大小
- 多线程程序中出现意外的内存泄漏
- c++ chrono的意外行为