我有一个愚蠢的问题。我尝试切换到 c++11 header ,其中之一是 chrono。但我的问题是我无法计算时间运算的结果。例如:
auto t=std::chrono::high_resolution_clock::now();
cout<<t.time_since_epoch();
给予:
initializing argument 1 of
‘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> >]’
... /usr/include/c++/4.6/ostream
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
关于c++ - std::chrono 和 cout,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7889136/