如何high_resolution_clock在C++中打印?
#include <iostream>
#include <chrono>
typedef std::chrono::high_resolution_clock high_resolution_clock;
int main()
{
std::cout << high_resolution_clock::now() << std::endl;
}
Run Code Online (Sandbox Code Playgroud)
建立以上结果:
/home/greg/repositories/firstProject/main.cpp:27: error: no match for ‘operator<<’ (operand types are ‘std::ostream {aka std::basic_ostream<char>}’ 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<1l, 1000000000l> > >}’)
std::cout << high_resolution_clock::now() << std::endl;
~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Run Code Online (Sandbox Code Playgroud)
和
/home/greg/repositories/firstProject/main.cpp:27: error: cannot bind ‘std::ostream {aka std::basic_ostream<char>}’ lvalue to ‘std::basic_ostream<char>&&’
std::cout << high_resolution_clock::now() << std::endl;
^
Run Code Online (Sandbox Code Playgroud)
看完这个答案后,我试图迭代"容器":
#include <iostream>
#include <chrono>
typedef std::chrono::high_resolution_clock high_resolution_clock;
int main()
{
for(auto i: high_resolution_clock::now()){
std::cout << i << std::endl;
}
}
Run Code Online (Sandbox Code Playgroud)
然而,这导致了更多的错误.我也试过使用printf并投射high_resolution_clock::now()到long long没有成功.
更新:
尝试在此处提出的另一个答案也产生了更多错误:
#include <iostream>
#include <chrono>
typedef std::chrono::high_resolution_clock high_resolution_clock;
int main()
{
auto i = high_resolution_clock::now();
std::cout << i.time_since_epoch() << std::endl;
}
Run Code Online (Sandbox Code Playgroud)
我非常感谢Passer By的回答,但是我担心它不太正确. 我的日期库提供I/O system_clock,但不是high_resolution_clock.但是,Passer By的代码恰好与gcc一起使用,因为该工具集high_resolution_clock是一个类型别名system_clock.
我正在使用clang,并且使用此工具集high_resolution_clock是steady_clock(和Visual Studio上的ditto)的类型别名.在这些平台上,Passer By的代码将导致编译时错误,该错误会导致operator<<找不到.
要明白这是为什么,明白之间的区别是很重要的system_clock和steady_clock:
system_clock就像一块手表(在智能手机接管地球之前你的手腕上的东西).它可以告诉你一天中的时间.并且因为没有时钟保持完美的时间,它有时会询问另一个时钟的时间,并对其自身进行微小调整以保持准确.
steady_clock就像一块秒表.这对于在跑道上计时跑步者或计时功能非常有用.它从不调整自己,但努力尽可能每秒标记一秒钟.但它不知道一天中的时间,甚至是一年中的哪一天.
high_resolution_clock也与任何人类日历或时间系统没有任何关系,并且被允许成为typedef任何一个system_clock或steady_clock.而在实践中,它始终是typedef这些时钟之一.现在你知道什么system_clock以及steady_clock是,只使用其中的一个,你的代码会更加便携.
我的库提供I/O system_clock,因为它的主要目的是扩展<chrono>到日历领域.
您可以使用我的库来流式传输chrono::duration.所以,如果你真的想,你可以得到duration出的high_resolution_clock和流是:
#include <iostream>
#include <chrono>
#include "date.h"
typedef std::chrono::high_resolution_clock high_resolution_clock;
using date::operator<<;
int main()
{
std::cout << high_resolution_clock::now().time_since_epoch() << std::endl;
}
Run Code Online (Sandbox Code Playgroud)
这只是输出给我:
2553634286064557ns
Run Code Online (Sandbox Code Playgroud)
在我的平台上,这意味着我的计算机已启动大约那么多纳秒.或者如果您更喜欢更具可读性的东西
std::cout << date::format("%T\n", high_resolution_clock::now().time_since_epoch());
Run Code Online (Sandbox Code Playgroud)
只输出:
709:32:51.552928058
Run Code Online (Sandbox Code Playgroud)
我的电脑已启动约709小时32分钟.
对于视频教程<chrono>,其中包括之间的区别system_clock和steady_clock,以及更多,请参阅:
https://www.youtube.com/watch?v=P32hvk8b13M
| 归档时间: |
|
| 查看次数: |
415 次 |
| 最近记录: |