std :: chrono和cout

时间:2011-10-25 12:17:05

标签: c++ time c++11 chrono

我有一个愚蠢的问题。我尝试切换到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();

给出无效的演员

4 个答案:

答案 0 :(得分:34)

正如其他人所说,您可以调用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

答案 1 :(得分:22)

快速谷歌搜索找到此页面:http://en.cppreference.com/w/cpp/chrono/duration,您可以在其中找到打印持续时间的示例。

编辑:它已移至http://en.cppreference.com/w/cpp/chrono/duration/duration_cast

答案 2 :(得分:8)

如果你想要以毫秒为单位的时间分辨率,你可以这样做:

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

答案 3 :(得分:7)

不确定您对此演员的期望,也许您想要t.time_since_epoch().count()