std::chrono 和 cout

问题描述 投票:0回答:5

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

给出无效的演员表

c++ time c++11 c++-chrono
5个回答
52
投票

正如其他人所指出的,您可以调用

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

25
投票

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

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


15
投票

如果您想要以毫秒为单位的计时,可以这样做:

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

7
投票

不确定您对这个演员阵容有何期望,也许您想要

t.time_since_epoch().count()


0
投票

我也遇到过同样的问题。我找到的解决方案是下载以下文件夹(标题为日期):

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<<;
时,将导致您使用我们之前包含的文件中定义的
<<
。这对我来说非常好,但如果您对此感到不舒服,只需将其添加到函数范围内即可。

© www.soinside.com 2019 - 2024. All rights reserved.