我有一个愚蠢的问题。我尝试切换到 c++11 标头,其中之一是 chrono。但我的问题是我无法计算出时间运算的结果。例如:
auto t=std::chrono::high_resolution_clock::now();
cout<<t.time_since_epoch();
给出:
初始化
的参数 1 ... /usr/include/c++/4.6/ostream‘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> >]’
cout<<(uint64_t)t.time_since_epoch();
给出无效的演员表
正如其他人所指出的,您可以调用
count()
成员函数来获取内部计数。
<chrono_io>
。它被记录在here。与仅使用 <chrono_io>
相比,count()
的主要优点是为您打印出编译时单位。这些信息当然可以手动获取,但让库为您提供要容易得多。
对我来说,你的例子:
#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>
,以及 1 个来源: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
快速谷歌搜索找到了此页面: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()
<< " milliseconds\n";
不要忘记添加包含的标题:
#include <chrono> //timing
不确定您对这个演员阵容有何期望,也许您想要
t.time_since_epoch().count()
?
我也遇到过同样的问题。我找到的解决方案是下载以下文件夹(标题为日期):
https://github.com/HowardHinnant/date
您还可以使用以下方式克隆它:
git clone https://github.com/HowardHinnant/date.git
检索到该文件夹后,将其添加到项目文件所在的文件夹中。在您正在编码的 C++ 文件的顶部,添加 include 语句
#include "date/date.h"
。然后添加using date::operations<<;
。之后,您应该能够完全按照您的预期使用 std::cout
。
值得注意的是,当您在全局空间中的文件顶部写入
using date::operations<<;
时,将导致您使用我们之前包含的文件中定义的 <<
。这对我来说非常好,但如果您对此感到不舒服,只需将其添加到函数范围内即可。