Std::计时和计数
std::chrono and cout
我有一个愚蠢的问题。我尝试切换到c++11头文件,其中之一是chrono。但我的问题是我不能计算时间运算的结果。例如:
auto t=std::chrono::high_resolution_clock::now();
cout<<t.time_since_epoch();
给:
初始化
‘std::basic_ostream<_CharT, _Traits>& std::operator<<(std::basic_ostream<_CharT, _Traits>&&, const _Tp&) [with _CharT = char, _Traits = std::char_traits<char>, _Tp = std::chrono::duration<long int, std::ratio<1l, 1000000l> >]’
的参数1…/usr/include/c + +/4.6/上ostream
cout<<(uint64_t)t.time_since_epoch();
给出无效的强制转换
正如其他人所注意到的,您可以调用count()
成员函数来获取内部计数。
我想添加,我正在尝试添加一个新的头:<chrono_io>
到这个库。这里记录了它。与只使用count()
相比,<chrono_io>
的主要优点是编译时单元为您打印出来。这些信息当然可以手工获取,但是直接让库为您提供这些信息要容易得多。
对我来说,你的例子:
#include <iostream>
#include <chrono_io>
int main()
{
auto t = std::chrono::high_resolution_clock::now();
std::cout << t.time_since_epoch() << 'n';
}
输出:
147901305796958 nanoseconds
执行此操作的源代码是开源的,可以在上面的链接中获得。它包括两个头:<ratio_io>
和<chrono_io>
,以及一个源:chrono_io.cpp
。
这个代码应该被认为是实验性的。它不是标准的,而且几乎肯定不会被标准化。事实上,来自LWG的初步评论表明,他们更喜欢默认的输出是该软件所称的"短格式"。这个可选输出可以通过以下命令获得:
std::cout << std::chrono::duration_fmt(std::chrono::symbol)
<< t.time_since_epoch() << 'n';
和输出:
147901305796958 ns
更新只花了十年时间,但c++ 20现在做到了:
#include <chrono>
#include <iostream>
int main()
{
auto t = std::chrono::high_resolution_clock::now();
std::cout << t.time_since_epoch() << 'n';
}
输出:147901305796958ns
在google上快速搜索一下,找到了这个页面:http://en.cppreference.com/w/cpp/chrono/duration,在那里你可以找到一个打印持续时间的例子。
编辑:它被移动到http://en.cppreference.com/w/cpp/chrono/duration/duration_cast
如果你想以毫秒为单位计时,你可以这样做:
auto t1 = std::chrono::high_resolution_clock::now();
//process to be timed
auto t2 = std::chrono::high_resolution_clock::now();
std::cout << "process took: "
<< std::chrono::duration_cast<std::chrono::milliseconds>(t2 - t1).count()
<< " millisecondsn";
不要忘记在包含的标头中添加:
#include <chrono> //timing
不确定你对这个角色有什么期望,也许你想要t.time_since_epoch().count()
?
- 没有找到相关文章